关闭

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

183人阅读 评论(0) 收藏 举报
分类:

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++;
       }
       
    }
};



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:29136次
    • 积分:747
    • 等级:
    • 排名:千里之外
    • 原创:131篇
    • 转载:2篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论