【力扣75】颜色分类
题目
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地 对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
必须在不使用库内置的 sort 函数的情况下解决这个问题。
示例 1:
1 | 输入:nums = [2,0,2,1,1,0] |
示例 2:
1 | 输入:nums = [2,0,1] |
提示:
n == nums.length1 <= n <= 300nums[i]为0、1或2
实现代码
1 | class Solution { |
核心点
- 因为只规定了三种颜色,那么元素的位置无非是左中右,只要定义两个指针,将元素维护在左右两边即可;
- 注意一个点,因为p是从0角标开始的,可能会在左边元素范围内,所以需要调整p位置至少跳到left位置
时间复杂度
时间组成:
假设nums大小为n
- p的遍历:
O(n) - 左右指针的遍历:
O(n)
总的时间:O(n)
空间复杂度
空间组成:
总的空间:没有额外空间,所以:O(1)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 青柠!
评论


















































