zoukankan      html  css  js  c++  java
  • lintcode-148-颜色分类

    148-颜色分类

    给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。
    我们可以使用整数 0,1 和 2 分别代表红,白,蓝。

    注意事项

    不能使用代码库中的排序函数来解决这个问题。
    排序需要在原数组中进行。

    样例

    给你数组 [1, 0, 1, 2], 需要将该数组原地排序为 [0, 1, 1, 2]。

    挑战

    一个相当直接的解决方案是使用计数排序扫描2遍的算法。
    首先,迭代数组计算 0,1,2 出现的次数,然后依次用 0,1,2 出现的次数去覆盖数组。
    你否能想出一个仅使用常数级额外空间复杂度且只扫描遍历一遍数组的算法?

    标签

    数组 排序 两根指针 脸书

    思路

    left 指向第一个非0的数,right 指向倒数第一个非 2 的数,i 指向0时与 nums[l] 交换,指向 2 时与 nums[r] 交换,指向 1 则继续向后指。

    code

    class Solution{
    public:
        /**
         * @param nums: A list of integer which is 0, 1 or 2 
         * @return: nothing
         */    
        void sortColors(vector<int> &nums) {
            // write your code here
            int size = nums.size();
            if(size <= 0) {
                return ;
            }
            
            int left = 0, right = size - 1;
            for(int i = 0; i < right+1; ) {
                while(i == left && nums[left] == 0) {
                    i++;
                    left++;
                }
                while(nums[right] == 2) {
                    right--;
                }
                if(nums[i] == 0) {
                    swap(nums[i], nums[left]);
                    left++;
                }
                else if(nums[i] == 2) {
                    swap(nums[i], nums[right]);
                    right--;
                }
                else {
                    i++;
                }
            }
        }
    };
    
  • 相关阅读:
    antd Icon
    antd button
    tree 向上查找(更新删除后页面的数据)
    tree 向下查找 (删除整条tree)
    tree结构统一修改属性名(递归)
    json转换为tree对象(递归)
    python测试题
    c函数练习
    飞机一只
    python1119作业1
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7236266.html
Copyright © 2011-2022 走看看