按颜色进行排序

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,需要再次进行判断!

发布了39 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/poppyl917/article/details/89403922
今日推荐