题目描述:

给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
注意:
不能使用代码库中的排序函数来解决这道题。  

示例:

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/sort-colors
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
实现如下:
 def sortColors(nums):
'''
   使用计数排序思想
:param nums:
:return:
'''
colors = [0] * 3 for i in nums:
colors[i] += 1 j = 0
for m in range(3):
for n in range(colors[m]): # 控制次数
nums[j] = m
j += 1 return nums print('==============测试colorsort()============')
nums = [2, 1, 1, 0, 2, 1]
result = sortColors(nums)
print("result=", result) def bubbleSort(nums):
'''
实现冒泡排序
:param nums:
:return:
''' for i in range(len(nums) - 1): # 控制循环次数
for j in range(len(nums) - i - 1): # 控制每次循环时在指定数组长度内进行
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
else:
continue return nums print("----------------测试Bubblesort()-------------")
nums = [2, 1, 3, 5, 6, 2, 0, 2, 0, 2]
result = bubbleSort(nums)
print("result=", result) def colorsort1(nums):
'''
使用桶排序思想
:param nums:
:return:
'''
color = [[] for i in range(3)]
for i in nums:
color[i].append(i) nums[:] = [] for i in color:
nums.extend(i) return nums print("-----------测试colorsort1()------------")
nums = [2, 1, 2, 1, 0, 1, 0, 0, 2]
result = colorsort1(nums)
print("result=", result) def colorsort2(nums):
'''
荷兰三色旗问题
:param nums:
:return:
'''
p0 = curr = 0
p2 = len(nums) - 1 while curr <= p2:
if nums[curr] == 0:
nums[p0], nums[curr] = nums[curr], nums[p0]
p0 += 1
curr += 1
elif nums[curr] == 2:
nums[curr], nums[p2] = nums[p2], nums[curr]
p2 -= 1
else:
curr += 1 return nums print("------------测试colorsort2()--------------")
nums = [2, 0, 2, 0, 0, 1, 1, 1]
result = colorsort2(nums)
print("result=", result)

输出:

==============测试colorsort()============
result= [0, 1, 1, 1, 2, 2]
----------------测试Bubblesort()-------------
result= [0, 0, 1, 2, 2, 2, 2, 3, 5, 6]
-----------测试colorsort1()------------
result= [0, 0, 0, 1, 1, 1, 2, 2, 2]
------------测试colorsort2()--------------
result= [0, 0, 0, 1, 1, 1, 2, 2]

总结:上述一共采用四种方法解决该问题。四种方法使用不同的思想方法。这里需要说明一下最后一种荷兰三色旗采用的三指针方法。初始化三个指针分别为p0,curr和p2,p0初始化为指向第一个元素,p2指向最后一个元素,curr指针用来遍历整个数组,指向当前元素,所以初始化也为0。当指向元素为0时,交换当前元素和p0,当指向元素为2时,交换当前元素和p2,再紧接着判断当前元素的值,代码中表现为curr不增加。

leetcode75之颜色分类的更多相关文章

  1. 【leetcode-75】 颜色分类

    (1过,解法不好,看參考荷兰国旗问题解法) 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0 ...

  2. lintcode:颜色分类

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

  3. (转!)利用Keras实现图像分类与颜色分类

    2018-07-19 全部谷歌渣翻加略微修改 大家将就的看哈 建议大佬们还是看看原文 点击收获原文 其中用到的示例文件 multi-output-classification 大家可以点击 下载 . ...

  4. Matplotlib:可视化颜色命名分类和映射颜色分类

    Matplotlib中支持的所有颜色分类 映射颜色分类

  5. LintCode——颜色分类

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

  6. 颜色分类(LintCode)

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

  7. LeetCode:颜色分类【75】

    LeetCode:颜色分类[75] 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 ...

  8. LeetCode 75. 颜色分类(Sort Colors) 30

    75. 颜色分类 75. Sort Colors 题目描述 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中, ...

  9. Java实现 LeetCode 75 颜色分类

    75. 颜色分类 给定一个包含红色.白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色.白色.蓝色顺序排列. 此题中,我们使用整数 0. 1 和 2 分别表示红 ...

随机推荐

  1. Java开发架构篇:DDD模型领域层决策规则树服务设计

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 在上一章节介绍了领域驱动设计的基本概念以及按照领域驱动设计的思想进行代码分层,但是仅 ...

  2. 记一条sql语句优化

    傻瓜级的.此sql语句存在于分销王系统中. 查阅slow log ,时间设置1s 发现很多 SELECT r.*, goods_id, bn, name FROM sdb_goods_rate r, ...

  3. 复习MintUI

    一.表单----复选框列表 1.<mt-checklist title="标题" options="['a','b','c']" #选项列表 v-mode ...

  4. nginx配置之错误和访问日志功能

    错误日志功能:logs/error.log nginx.conf中: #error_log logs/error.log; #error_log logs/error.log notice; #err ...

  5. Crontab定时备份网站脚本及mysql数据库

    1)shell脚本 #!/bin/bash #你要修改的地方从这里开始 MYSQL_USER="root" #mysql用户名 MYSQL_PASS="123456&qu ...

  6. C#常见异常

    SystemException 其他用户可处理的异常的基本类 ArgumentException 方法的参数是非法的 ArgumentNullException 一个空参数传递给方法,该方法不能接受该 ...

  7. linux 去除^M 换行符

    一般,在windows下写的shell脚本,都会去linux执行,都会有^M 符号,那么怎么去除呢? 第一种方法:cat -A filename 就可以看到windows下的断元字符 ^M要去除他,最 ...

  8. java中String转换成json,json转换成String

    前置添加pom <!-- 配置gson --> <dependency> <groupId>com.google.code.gson</groupId> ...

  9. [JavaWeb基础] 028.CSS简介和基础语法

    css 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中,是为了解决内容与表现 ...

  10. SpringBoot返回html页面

    一般Controller返回数据或页面,今天谈一下返回页面的场景. 一.不使用template 1. controller中定义对应的访问路由及返回的页面(使用Controller,不要使用RestC ...