颜色分类
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
一、题目描述
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 必须在不使用库的sort函数的情况下解决这个问题。
提示:
n == nums.length
1 <= n <= 300
nums[i] 为 0、1 或 2
二、测试样例
输入:nums = [2,0,2,1,1,0]
输出:[0,0,1,1,2,2]
说明:经过重排后,按照 0, 1, 2的顺序排列。
三、算法思路
本题是将红白蓝三种颜色分类,很经典的一道题目。
如果是两种颜色分类,可以直接使用两个指针。
本题需要区分三种颜色,三种三色使用整数 0 ,1,2 来区分。
使用三个指针 p1、p2 和 p3,其中,p1 从头开始,p2 从尾开始, p3 从头开始。p1 用于区分 0 和 其它颜色,p3 用于区分 2 和其它颜色,p2 用于将 0 和 2 放到开头和结尾。
四、代码实现
五、复杂度分析
5.1 时间复杂度
时间复杂度:O(n),其中,n 为数组的长度,使用三个指针,只遍历了一次数组,所以时间复杂度为O(n)。
5.2 空间复杂度
空间复杂度:O(1),在上述算法中,仅使用到了三个指针,所以空间复杂度为 O(1)。
六、总结
本题是分类两种颜色的加强版,如果理解了两种颜色的解决方法,解决本题应该不难。
🎈 作者:Linux猿
🎈 简介:CSDN博客专家🏆,华为云享专家🏆,Linux、C/C++、云计算、物联网、面试、刷题、算法尽管咨询我,关注我,有问题私聊!
🎈 关注专栏: 数据结构和算法成神路【精讲】优质好文持续更新中……🚀🚀🚀
🎈 欢迎小伙伴们点赞👍、收藏⭐、留言💬
- 点赞
- 收藏
- 关注作者
评论(0)