美文网首页
分类颜色

分类颜色

作者: Houtasu | 来源:发表于2018-07-27 11:17 被阅读0次

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

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

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

示例:

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

进阶:

  1. 一个直观的解决方案是使用计数排序的两趟扫描算法。首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。
  2. 你能想出一个仅使用常数空间的一趟扫描算法吗?

解题思路
第一种自然就是进阶中给出的一趟遍历计数后,再一趟重写数组
代码如下:

def sortColors(nums):
    count = [0, 0, 0]
    for i in nums:
        count[i] += 1
    nums.clear()
    for i in range(3):
        for j in range(count[i]):
            nums.append(i)

还有第二种,只扫描一趟,可以使用一个新的数组,每次往新的数组里添加就行了,但要求了原地排序,那就只能在本数组内进行修改,我的想法是遇到0就在数组最前面加一个0,遇到2就在数组最后面加一个2,遇到1就在0后面加一个1,这需要两个变量记录0和2的个数,当然添加前还要删除本身。不过这种方法的速度算是很慢的了。排在了最后20%内,应该是数组的删除和添加耗费了时间
代码如下:

def sortColors(nums):
    count_zero = 0
    count_two = 0
    for i in range(len(nums)):
        if nums[i - count_two] == 0:
            count_zero += 1
            del nums[i - count_two]
            nums.insert(0, 0)
        elif nums[i - count_two] == 2:
            del nums[i - count_two]
            nums.append(2)
            count_two += 1
        else:
            del nums[i - count_two]
            nums.insert(count_zero, 1)

相关文章

  • 分类颜色

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

  • 颜色分类

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

  • 颜色分类

    冷色:蓝,青,绿蓝 暖色:红,橙,黄。 中性色:绿,紫色。 消色:黑白灰,消色是不含颜色。 绿色和紫色,叫中性色,...

  • 颜色分类

    题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/sort...

  • 颜色分类

    75. 颜色分类 Tips: 经典的荷兰三色国旗问题最简单的方法,做两趟扫描,先选定pivot = 1,第一趟下来...

  • 颜色分类

    /* @Author: sumBorn @Date: 2022-02-23 15:14:43 @LastEditT...

  • 颜色分类--75

  • 【leetcode】颜色分类

    【leetcode】颜色分类 题目: 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使...

  • 学习PS之前的基础知识总结

    颜色篇 颜色分类(通过媒介) hsb hsb分类媒介是眼睛视觉细胞对颜色的感受。h表示色相(用色相环上的度数划分)...

  • seaborn快速入门(2)——调色板

    首先,初始化设置 1. 分类颜色系统 分类色板有6种颜色,使用color_palette函数创建: 分类色板有6套...

网友评论

      本文标题:分类颜色

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