[LeetCode] 75. 颜色分类(荷兰国旗)

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,所以不++,要进行下一轮比较。

 

posted @ 2019-03-15 23:00  Nice_to_see_you  阅读(252)  评论(0编辑  收藏  举报