75. Sort Colors (Medium)
Input: [2,0,2,1,1,0]
Output: [0,0,1,1,2,2]
题目描述:只有 0/1/2 三种颜色。
public void sortColors(int[] nums) {
int zero = -1, one = 0, two = nums.length;
while (one < two) {
if (nums[one] == 0) {
swap(nums, ++zero, one++);
} else if (nums[one] == 2) {
swap(nums, --two, one);
} else {
++one;
}
}
}
private void swap(int[] nums, int i, int j) {
int t = nums[i];
nums[i] = nums[j];
nums[j] = t;
}
首先如果是0,zero的游标每次都会停在0处,只有你要跟他进行交换了,他开始加加,而且下一个一定是1,只有这样one才能直接走下去,所以一定是1被换到新的位置处啦。
然后关于遇到2,和最后一个换,换完one不动,因为有可能是0,需要再次进行判断!