题目描述:

给定一个包含红色、白色和蓝色,一共 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 代码精简

    Java 代码精简 利用语法 利用三元表达式 普通 String title; if (isMember(phone)) { title = "会员"; } else { titl ...

  2. Hyperledger Fabric——balance transfer(三)创建和加入Channel

    详细解析blance transfer示例的创建通道(Channel)和加入节点到通道的过程. 创建Channel 1.首先看app.js的路由函数 var createChannel = requi ...

  3. 【IOS】点击按钮-去高亮-加点击效果

    (1)前提:html页面 ,手机端, (2)问题一: 在iphone上(貌似是9以后..),给div/span/...等元素上加onclick事件,根本不起作用,这是为啥捏? -- 在元素上加  cu ...

  4. 当.Net成为大厂门槛代码小白该何去何从?

    掌握.Net已成为进入大厂的通行牌.越来越多的互联网软件公司开始使用.Net Core,根据去年数据显示腾讯.网易.顺丰.携程.中通.申通.同程艺龙.微医.233网校.问卷星.金蝶等关键业务已经在往. ...

  5. C#网络编程入门之TCP

    目录: C#网络编程入门系列包括三篇文章: (一)C#网络编程入门之UDP (二)C#网络编程入门之TCP (三)C#网络编程入门之HTTP 一.概述 UDP和TCP是网络通讯常用的两个传输协议,C# ...

  6. 什么,容器太多操作不过来?我选择Docker Compose梭哈

    接上一篇:面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧 一.容器之间通信 1.单向通信 1.1.什么意思 mysql和tomcat是两个独立的容器,但是tomcat需要和 ...

  7. 没找到工作的Java软件工程师是屌丝中的屌丝啊

    Java软件开发的工作咋就那么难找呢?

  8. Springboot 内置tomcat 基本配置收集整理

    配置一: server:# tomcat 配置  tomcat:    # 接收队列长度    accept-count: 1000    # 最小空闲线程数    min-spare-threads ...

  9. STM32读取匿名光流数据——与Guidance的光流和超声波做对比测试

    使用两个串口同时读取匿名光流和Guidance数据:用以比较两个光流的效果 Github链接:https://github.com/W-yt/YuTian_Pro/tree/master/Guidan ...

  10. 内部服务器错误Internal server error解决方法

    这里说的内部服务器错误是网站前台能正常访问,而后台程序在执行某项任务/功能时所出现的内部服务器错误解决方法: 此错误通常是超时导致的,像程序在执行采集.静态页面生成时所耗时间太长导致达到超时限制的: ...