颜色分类
75. 颜色分类
给定一个包含红色、白色和蓝色、共 n
个元素的数组 nums
,**原地**对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
我们使用整数 0
、 1
和 2
分别表示红色、白色和蓝色。
必须在不使用库的sort函数的情况下解决这个问题。
示例 1:
1 |
|
示例 2:
1 |
|
提示:
n == nums.length
1 <= n <= 300
nums[i]
为0
、1
或2
双指针法
p指向待移动元素
i指向头,j指向尾
保持[0,i)的元素全部为0
[i,p)的元素全部为1
(j,len-1]的元素全部为2
p移动到与j重叠时会遇到3种情况
- 遇到0,与j交换,i后移保证i之前为0,因为p之前的元素位置都已确定,故p也要后移
- 遇到1,不用交换,p后移,保持p在1区间的后面
- 遇到2,与j交换,交换后p未知,故p不移动,j前移

1 |
|
- 时间复杂度:O(n)
- 空间复杂度:O(1)
颜色分类
http://example.com/2023/02/13/算法/数组/5. 颜色分类/