class Solution { public: void sortColors(vector<int>& nums) { int begin=0,current=0,end=nums.size()-1; while(current<=end){ //带等号,相等的时候最后一个数还没有进行比较(current,end比较) if(nums[current]==0){ swap(nums[current++],nums[begin++]); //begin处得到一个0,自然后移一位 } else if(nums[current]==2){ swap(nums[current],nums[end--]);//只改变末尾指针,换到当前的是最后一个值,需要在下一轮进行比较 } else{ current++; } } } };
为啥current==2时不++,而current==0时候却要++呢?
等于0的时候,考虑到从左往右遍历,从begin处换过来的数不可能是0,也不可能是2,只能是1,故current++;
但是与end交换时,末尾的数却可能是2,所以不++,要进行下一轮比较。