解题思路
1.两个指针:头和尾--->p0和p2
2.遇到0,跟p0进行交换,p0和i都往前+1走,p0之前肯定是保证顺序正确
3.遇到2,跟p2进行交换,p2往回-1走,i停一轮是为了检测当前被换过来的数字,直到i和p2相遇,说明结束了
代码
class Solution {
public:
void sortColors(vector<int>& nums) {
int n = nums.size();
int p0 = 0,p2 = n - 1;
for(int i = 0;i <= p2; ++i){
while(i <= p2 && nums[i] == 2){//用while是为了让i停留
swap(nums[i],nums[p2]);
--p2;
}
if(nums[i] == 0){//用if是判断一次让p0和i都往前+1走
swap(nums[i],nums[p0]);
++p0;
}
}
}
};