leetcode 74 颜色分类

给定一个包含红色、白色和蓝色,一共 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

注意:
不能使用代码库中的排序函数来解决这道题。

示例:

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]

双指针法

使用双指针,分别指向数组的头和尾,步进并将 非1的数 扔向两边,即将 0 扔向左边,将 2 扔向右边。定义left指针指向数组开头位置,right指针指向数组末尾位置。

遍历原数组,如果遇到 0,则交换该值和left位置的值,并将left指针后移一位。若遇到 2,则交换该值和right位置的值,并将right指针前移一位。若遇到1,则继续遍历。
参考:https://blog.csdn.net/fcfc0724/article/details/82972195 

public void sortColors(int[] nums) {
    int left = 0;
    int right = nums.length - 1;
    for(int i = left; i <= right; i++){
        if(nums[i] == 0) swap(nums, left++, i);
        if(nums[i] == 2) swap(nums, right--, i--);
    }
}
public void swap(int[] nums, int i, int j){
    int temp = nums[i];
    nums[i] = nums[j];
    nums[j] = temp;
}

猜你喜欢

转载自blog.csdn.net/qq_43322057/article/details/84555227
今日推荐