题解 | #颜色分类#
颜色分类
https://www.nowcoder.com/practice/52e04ddb7b5640a8869c2d3da2ad3344
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param colors int整型一维数组
* @return int整型一维数组
*/
public int[] sortColor (int[] colors) {
// write code here
int i = 0; // 扫描指针,也就是赋值指针
int l = 0; // 左指针
int r = colors.length - 1; // 右指针
while (i <= r) { // 从头到尾扫描
if (colors[i] == 0) { // 等于0的与左指针交换,然后赋值指针++,左指针++
swap(colors, i++, l++);
} else if (colors[i] == 1) { // 等于1的跳过不做处理
i++;
} else { // 来到这个的2的需要与右边指针交换,同时右指针左移
swap(colors, i, r--);
}
}
return colors;
}
private void swap(int[] colors, int i, int j) {
int tmp = colors[i];
colors[i] = colors[j];
colors[j] = tmp;
}
}
解题思想:三指针:左右指针+扫描赋值指针,总共三个数,0肯定在左侧,2肯定在右侧,中间的肯定是0.
#算法##算法笔记#
小天才公司福利 1176人发布
