LeetCode 75. Sort Colors

  • 计数排序,记下0,1,2的个数,然后在赋值给vector。这样数组循环了两遍不符合题意
class Solution {
public:
    void sortColors(vector<int>& nums) {
        int a = 0, b = 0, c = 0;
        for(int i=0; i<nums.size(); ++ i)
        {
            if(nums[i] == 0)
                a ++;
            else if(nums[i] == 1)
                b ++;
            else
                c ++;
        }
        int i=0;
        for(i=0; i<a; ++ i)
            nums[i] = 0;
        b = a + b;
        for(; i<b; ++ i)
            nums[i] = 1;
        c = b + c;
        for(; i<c; ++ i)
            nums[i] = 2;
    }
};
  • 用两个数分别记录0的结束位置和2的起始位置,循环过程中交换。不过代码好像写挫了,时间反而比计数排序还慢。
class Solution {
public:
    void sortColors(vector<int>& nums) {
        int b = 0, e = nums.size() - 1;
        int l = b, r = e;
        while(b <= e)
        {
            if(nums[b] == 0)
            {
                if(b == l)
                    b ++;
                else
                    swap(nums[b], nums[l]);
                l++;
            }
            else if(nums[b] == 1)
                b ++;
            else if(nums[b] == 2)
            {
                swap(nums[b], nums[r]);
                if(r == e)
                    e --;
                r --;
            }
            else if(nums[e] == 0)
            {
                swap(nums[l], nums[e]);
                if(l == b)
                    b ++;
                l ++;
            }
            else if(nums[e] == 1)
                e --;
            else
            {
                if(e == r)
                    e --, r --;
                else
                    swap(nums[e], nums[r]);
                r --;
            }
        }
    }
};
  • 看了别人的代码,认清了自己的代码好挫、、、
class Solution
{
public:
    void sortColors(vector<int>& nums)
    {
        int b = 0, e = nums.size()-1;
        for(int i=0; i<=e; ++ i)
        {
            if(nums[i] == 0)
                swap(nums[i], nums[b ++]);
            else if(nums[i] == 2)
                swap(nums[i --], nums[e --]);
        }
    }
};
posted @ 2017-03-03 21:10  aiterator  阅读(102)  评论(0编辑  收藏  举报