题解 | #牛的品种排序I#
牛的品种排序I
https://www.nowcoder.com/practice/e3864ed7689d460c9e2da77e1c866dce
考察的知识点:数组、双指针;
解答方法分析:
- 定义两个指针
left和right,分别指向数组的第一个位置和最后一个位置。 - 当
left小于right时,进入循环:在内部的while循环中,先找到不是黑牛的位置,即将left向右移动直到找到值为1的元素。接着,在另一个内部的while循环中,找到不是白牛的位置,即将right向左移动直找到值为0的素。如果仍然小于right,则交换left和right所指向元素,将黑牛和白牛位置进行交换。 - 循环结束后,数组中相同品种的牛已经放在了一起,并按照黑牛和白牛的顺序排列。
- 返回经过排列后的牛的数组。
所用编程语言:C++;
完整编程代码:↓
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param cows int整型vector
* @return int整型vector
*/
vector<int> sortCows(vector<int>& cows) {
int n = cows.size();
int left = 0;
int right = n - 1;
while (left < right) {
while (left < right && cows[left] == 0) {
left++;
}
while (left < right && cows[right] == 1) {
right--;
}
if (left < right) {
swap(cows[left], cows[right]);
}
}
return cows;
}
};
字节跳动公司福利 1381人发布