颜色分类
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. 颜色分类/