1. 颜色分类
(1)双指针(普通)
- 使用双指针left,right,指针left左侧都是0,指针right右侧都是2,初始化left,right在数组的两端。
- 使用一个遍历变量i,遍历数组时nums[i]为0,则与左指针指向数字交换位置,然后左指针和i都向后移动,i左侧直到左指针都是1,当nums[i]为2时,则与右指针指向数字交换位置,然后右指针向左移动,i不变因为还要判断交换来的数字是什么,如果nums[i]为1,则不交换i向后移动,循环终止条件时i超过了右指针,此时后面已经是2,无需继续交换
class Solution {
public void sortColors(int[] nums) {
int left = 0, right = nums.length - 1;
int i = 0;
while (i <= right) {
//遍历数组时nums[i]为0,则与左指针指向数字交换位置,然后左指针和i都向后移动
if (nums[i] == 0) {
swap(nums