美文网首页
75.颜色分类

75.颜色分类

作者: su945 | 来源:发表于2020-08-06 21:32 被阅读0次

    题目描述

    给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

    此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

    注意:
    不能使用代码库中的排序函数来解决这道题。

    示例:

    输入: [2,0,2,1,1,0]
    输出: [0,0,1,1,2,2]

    问题分析

    算法

    • 初始化0的最右边界:p0 = 0。在整个算法执行过程中 nums[idx < p0] = 0.
    • 初始化2的最左边界 :p2 = n - 1。在整个算法执行过程中 nums[idx > p2] = 2.
    • 初始化当前考虑的元素序号 :curr = 0.
    • While curr <= p2 :
      若 nums[curr] = 0 :交换第 curr个 和 第p0个 元素,并将指针都向右移。
      若 nums[curr] = 2 :交换第 curr个和第 p2个元素,并将 p2指针左移 。
      若 nums[curr] = 1 :将指针curr右移。

    解题思路1

    class Solution {
    public:
        void sortColors(vector<int>& nums) {
    
            if (nums.empty())
            {
                return;
            }
            int p0 = 0;
            int cur = 0;
            int p2 = nums.size() - 1;
    
            while (p2 >= cur)
            {
                if (nums[cur] == 0)
                {
                    swap(nums[p0++], nums[cur++]);
                }
                else if (nums[cur] == 2)
                {
                    swap(nums[p2--], nums[cur]);
                }
                else
                {
                    cur++;
                }
            }
        }
    };
    

    相关文章

      网友评论

          本文标题:75.颜色分类

          本文链接:https://www.haomeiwen.com/subject/tkdarktx.html