leetcode75. 颜色分类-快速排序
创始人
2025-05-28 02:24:55
0

题目

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

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

必须在不使用库内置的 sort 函数的情况下解决这个问题。

示例 1:

输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
示例 2:

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

思路和代码

今天写的时候想起了左神说的快速排序中的partition过程,可惜具体的想不起来了,自己写了一个笨方法,一次从前往后遍历,把2放在后面,一次从后往前遍历,把0放在前面。调了好几次才通过,心情有那么一点不爽。

class Solution:def sortColors(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""n = len(nums)#想到一个笨方法 两次遍历#pre-last 把所有的2放在后面last = n-1for i in range(n):while last > 0 and nums[last] == 2:last -=1if nums[i] == 2 and i < last:    nums[i], nums[last] = nums[last], nums[i]pre = 0for i in range(last,-1,-1):while pre < n and nums[pre]==0:pre += 1if nums[i] == 0 and i > pre:nums[i], nums[pre] = nums[pre],nums[i]

回顾了一下左神说的partition过程。

目的就是把小于num的数放在左边,等于num的数放在中间,大于num的数放在右边。(在快速排序中,这样操作就把中间为num的值放好了位置,然后对两边重复该操作就而已得到有序数组)。

具体做法:
1.小于区,初始为-1,大于区,初始值为n。
2.当当前值 3.当当前值=num时,i++
4.当当前值>num时,当前值和大于区的前一个值交换位置,大于区往左边扩大1,i不变。不变的原因是当前的值换了一个新的值,要重新进行判断
5.当i与大于区发生碰撞,过程截止

代码:

class Solution:def sortColors(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""n = len(nums)small = -1big = ni = 0while i < big:if nums[i] == 0:nums[i], nums[small+1] = nums[small+1], nums[i]small += 1i += 1elif nums[i] == 1:i += 1else:nums[i], nums[big-1] = nums[big-1], nums[i]big -= 1

相关内容

热门资讯

el-table实现热度表 实现效果 {{ scope.$index + 1 }}...
『C/C++养成计划』变量的执... 变量的执行顺序&动态工厂 文章目录一. 变量执行顺序二. 虚拟地址空间三. 动态工厂创建对象3.1...
揭秘:大清为什么要颁布剃发令?... 今天趣历史小编为大家带来了一篇关于清朝的文章,欢迎阅读哦~大清是什么时候下达“剃发令”的?其实早在他...
老子为什么名李耳?古人名字有什... 今天趣历史小编为大家带来了一篇关于老子的文章,欢迎阅读哦~古代人一般既有名又有字,有的还有别号。《周...
linux网络编程面试题 1、什么是IO多路复用 I/O多路复用的本质是使用select,poll或者epoll函数ÿ...
清朝士兵中兵和勇就一字之差 他... 还不知道:清朝士兵中的兵和勇有什么区别的读者,下面趣历史小编就为大家带来详细介绍,接着往下看吧~看过...
三国著名的衣带诏事件中,刘备为... 今天趣历史小编为大家带来了一篇关于刘备的文章,欢迎阅读哦~我们都知道衣带诏事件是小说《三国演义》中非...
清朝的体制到底是什么样的 为... 还不知道:清朝亲王那么多为什么无人造反呢的读者,下面趣历史小编就为大家带来详细介绍,接着往下看吧~在...
基于微信小程序的外卖点餐小程序 文末联系获取源码 开发语言:Java 框架:ssm JDK版本ÿ...
超越想象,博睿数据3D数字展厅... 历经多月精心打磨 博睿数据3D数字展厅正式上线 带来一个有温度、易操作、更全面的 线上形象展览平台 ...
最新或2023(历届)超生非婚... 非婚生子女可申请办理户口 从三亚市公安局获悉,为进一步规范户口登记和居民身份证管理,有效解决办理户口...
最新或2023(历届)青岛户口...   外来人员通过积分来青岛安家落户终于有具体细则了!6日,备受关注的青岛积分落户细则对外发布,青岛成...
最新或2023(历届)北京户口...  派出所办理常住户口登记工作规范  为加强常住人口管理,严密户口登记工作,依据《中华人民共和国户口登...
深度学习面试问题与答案(202... 1)什么是深度学习? 如果你正在参加深度学习面试,那么你...
非婚生子如何上户口,非婚生子女... 未婚子女、非婚生子女、私生子及同居生子之 户口与抚养问题 基本案情 王某,男,1972年7月出生,汉...
最新或2023(历届)上海户口...  为了积极稳妥地解决历史遗留户口问题,现就本市投靠类户口迁移提出若干实施意见如下:  一、 关于子女...
最新或2023(历届)青岛户口...  第一条 为推进落实我市积分落户管理制度,根据《青岛市人民政府关于进一步推进户籍制度改革的意见》(青...
最新或2023(历届)青岛户口...  近日,青岛市颁布了《关于进一步推进户籍制度改革的意见》,今后将按照“合理控制城区、适当放宽新区、全...
最新或2023(历届)浙江省迁...  1、户口迁移的原则  〈1〉户口迁移,应遵循人户一致和居住地登记的原则。  〈2〉办理户口迁移,关...
青岛市积分落户细则出炉,最新或...  作为本市人才引进落户政策的“兜底”政策,积分落户实施细则终于出炉!青岛也成为继广州 、深圳之后第三...