题解 | #颜色分类#
颜色分类
https://www.nowcoder.com/practice/52e04ddb7b5640a8869c2d3da2ad3344
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param colors int整型vector
* @return int整型vector
*/
vector<int> sortColor(vector<int>& colors) {
int n = colors.size();
// 只聚焦于0和2,当把0和2都处理完后,1自然也处理好了
int p0 = 0, p2 = n-1;
// 从数组头元素开始遍历,直到与p2相遇后,因为p2索引后的元素应该排好了2
for(int i=0; i<=p2; ++i){
// 如果当前遇到了2,且索引符合置换条件,那么就交换
// 因为之前的p2所指位置可能本身也是2,所以是while循环判断
while(colors[i]==2 && i < p2){
swap(colors[i], colors[p2--]);
}
// 如果遇到了0 (或者说原本是2,但经过上面的while代码块交换后,换回来了一个0),那么与p0索引交换
if(colors[i]==0) swap(colors[i],colors[p0++]);
}
return colors;
}
};
查看14道真题和解析