LeetCoe Day60 sort colors

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--]);
        }
    }
};

猜你喜欢

转载自blog.csdn.net/weixin_41394379/article/details/85255629