多指针
class Solution {
public:
void sortColors(vector<int>& nums) {
int left=0,right=nums.size()-1,mid=left+1;
while(left<right&&mid<=right){
if(nums[left]==0||nums[right]==2){
if(nums[left]==0){
left++;
if(mid<=left)mid=left+1;
}
if(nums[right]==2)right--;
}else if(nums[left]>nums[mid])swap(nums[left],nums[mid]);
else if(nums[mid]>nums[right])swap(nums[right],nums[mid]);
else mid++;
}
}
};
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/5fb615d248899c79d97f6b96cef0b85b.png)
计数
class Solution {
public:
void sortColors(vector<int>& nums) {
vector<int>v(3,0);
for(int i:nums)v[i]++;
for(int i=0;i<v[0];i++)nums[i]=0;
for(int i=v[0];i<v[0]+v[1];i++)nums[i]=1;
for(int i=v[0]+v[1];i<v[0]+v[1]+v[2];i++)nums[i]=2;
}
};
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0fd91dd28508fe265dc49ff3682788ce.png)