guicaisa的博客

抠着鼻屎,敲着代码。

leetcode刷题,总结,记录,备忘 75

leetcode75

Sort Colors

 

Given an array with n objects colored red, white or blue, sort them so that objects of the same color are adjacent, with the colors in the order red, white and blue.

Here, we will use the integers 0, 1, and 2 to represent the color red, white, and blue respectively.

Note:
You are not suppose to use the library's sort function for this problem.

比较简单的题目,但是后面有高的要求,先上简单版的

class Solution {
public:
    void sortColors(vector<int>& nums) {
        vector<int> temp;
        vector<int>::iterator it = nums.begin();
        while ((it = find(it, nums.end(), 0)) != nums.end())
        {
            temp.push_back(*it);
            it++;
        }
        it = nums.begin();
        while ((it = find(it, nums.end(), 1)) != nums.end())
        {
            temp.push_back(*it);
            it++;
        }
        it = nums.begin();
        while ((it = find(it, nums.end(), 2)) != nums.end())
        {
            temp.push_back(*it);
            it++;
        }
        nums = temp;
    }
};


更高级的要求是只有一次遍历,说实话我不会,,,,去查了别人的解法,有了理解。即将0扔到前面,将2扔到后面,如果是 1就不管,我看了别人的写法,,很容易的就理解了流程,但是其中有几个关键点,就是在先判断出是0,就是互换之后,下标不能自增,还应该再循环一次,再判断一下互换了之后的值是不是2,否则才 ++遍历下一个数。其实流程看几次就明白了,再不济就数字带进去试。我在初学变成的时候,看的郝斌的视频,他说过,如果有什么程序流程看不懂啥的,就带数进去试,试几次就懂了,的确是至理名言。

class Solution {
public:
    void sortColors(vector<int>& nums) {
       if (nums.size() <= 1)
       return;
       int s = -1, e = nums.size();
       int it = 0, temp;
       while (it < nums.size())
       {
           if (nums[it] == 0)
           {
               if (it > s)
               {
                   temp = nums[it];
                   nums[it] = nums[++s];
                   nums[s] = temp;
               }
               else it++;
           }else if  (nums[it] == 2)
           {
               if (it < e)
               {
                   temp = nums[it];
                   nums[it] = nums[--e];
                   nums[e] = temp;
               }
               else
               it++;
           }
           else
           it++;
       }
       
    }
};



阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/guicaisa/article/details/46809899
个人分类: leetcode
上一篇leetcode刷题, 总结,记录,备忘 232
下一篇leetcode刷题, 总结,记录,备忘145
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭