重温算法之颜色分类
一.题目介绍
1.题目来源
链接:LeetCode
2.题目
给定一个包含红色、白色和蓝色、共 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]
二.具体实现
1.实现思路
通过提示我们可以容易想到头尾各用一个指针,然后一次遍历,遇到红色就与头部置换,遇到蓝色就与尾部置换,其中遇到蓝色时,需要判断尾部之前为红色的场景,此时通过将 index 减一,可以避免代码添加额外判断。
2.实现代码
1)自己的实现方式
复制代码
2)题友的实现方式
单指针:对数组进行两次遍历。在第一次遍历中,将数组中所有的 00 交换到数组的头部。在第二次遍历中,将数组中所有的 11 交换到头部的 00 之后。此时,所有的 22 都出现在数组的尾部,这样就完成了排序。
3.运行结果
版权声明: 本文为 InfoQ 作者【自由】的原创文章。
原文链接:【http://xie.infoq.cn/article/aed0f27b58033716e0a29b868】。文章转载请联系作者。
评论