class Solution {
public:
void sortColors(vector<int>& nums) {
int count[3]={0};
for(int i=0;i<nums.size();i++){
count[nums[i]]++;
}
int index=0;
for(int i=0;i<3;i++){
for(int j=0;j<count[i];j++)
nums[index++]=i;
}
}
};
定义两个指针red和blue,从头开始遍历,遇到0和red交换,red++,遇到2和blue交换,blue–
需要注意的是,由于和red交换index>=red,所以交换后无需再判断当前位置,而与blue交换是从后面换到前面来,不一定换来的是啥,要重新判断当前位置,即blue–时,index–
class Solution {
public:
void sortColors(vector<int>& nums) {
int red=0,blue=nums.size()-1;
for(int index=0;index<=blue;index++){
if(nums[index]==0)
swap(nums[index],nums[red++]);
else if(nums[index]==2)
swap(nums[index--],nums[blue--]);
}
}
};