Sort Colors

思路一:使用一个vector记录每一个index出现的次数

class Solution {
public:
    void sortColors(vector<int>& nums) {
        vector<int> count(3);
        for(int i=0; i<nums.size(); ++i)
            ++count[nums[i]];
        
        int k = 0;
        for(int i=0; i<3; ++i)
        {
            for(int j=0; j<count[i]; ++j)
                nums[k++] = i;
        }
    }
};

方法二:

使用两个指针记录0和1的边界

class Solution {
public:
    void sortColors(vector<int>& nums) {
        int lt = 0, rt = nums.size()-1;
        for(int i=lt; i<=rt;)
        {
            if(nums[i] == 0)
                swap(nums[i++], nums[lt++]);
            else if(nums[i] == 2)
                swap(nums[i], nums[rt--]);
            else
                ++i;
        }
    }
    
    void swap(int &a, int &b)
    {
        int tmp = a;
        a = b;
        b = tmp;
    }
};

 

posted @ 2017-03-31 22:41  chengcy  Views(124)  Comments(0)    收藏  举报