题解 | #牛的品种排序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; } };