zoukankan      html  css  js  c++  java
  • 148. 颜色分类(三个指针)

    148. 颜色分类

    中文English

    给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。

    我们可以使用整数 0,1 和 2 分别代表红,白,蓝。

    样例

    样例 1

    输入 : [1, 0, 1, 2]
    输出 : [0, 1, 1, 2]
    解释 : 原地排序。
    

    挑战

    一个相当直接的解决方案是使用计数排序扫描2遍的算法。

    首先,迭代数组计算 0,1,2 出现的次数,然后依次用 0,1,2 出现的次数去覆盖数组。

    你否能想出一个仅使用常数级额外空间复杂度且只扫描遍历一遍数组的算法?

    注意事项

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

     
     
    输入测试数据 (每行一个参数)如何理解测试数据?
    class Solution:
        """
        @param nums: A list of integer which is 0, 1 or 2 
        @return: nothing
        """
        def sortColors(self, nums):
            # write your code here
            #三指针,遇到0放左边,遇到2放右边
            length = len(nums)
            #left记录左边0的个数,right记录右边2的个数
            left, right = 0, length - 1
            i = 0
    
            #当i和right两者想等,即说明已经交换完了
            while i <= right:
                if nums[i] == 0:
                    nums[left], nums[i] = nums[i], nums[left]
                    left += 1 
                    i += 1
                elif nums[i] == 1:
                    i += 1
                    continue
                elif nums[i] == 2:
                    nums[right], nums[i] = nums[i], nums[right]
                    right -= 1
            
            return nums
  • 相关阅读:
    Django安装和启动
    转载:Python 包管理工具解惑
    电子商务的基本理念
    javascript的循环使用
    错误码
    weex初始
    Flex 布局
    css样式重置表
    手机端页面自适应解决方案—rem布局
    实用的60个CSS代码片段[下]
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/13196156.html
Copyright © 2011-2022 走看看