力扣练习之颜色分类

我爱海鲸 2023-03-21 22:03:23 暂无标签

简介中级算法、排序和搜索

原题出处:https://leetcode.cn/leetbook/read/top-interview-questions-medium/xvg25c/

解法一:

class Solution {
    public void sortColors(int[] nums) {
        int left = 0;
        int right = nums.length - 1;
        int index = 0;
        while (index <= right) {
            if (nums[index] == 0) {
                swap(nums,left++,index++);
            } else if (nums[index] == 1) {
                index++;
            } else if ((nums[index] == 2)){
                swap(nums,index,right--);
            }
        }
    }

    private void swap(int[] nums,int i ,int j) {
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
}

思路:交换法,定义三个指针,一个左指针,一个是右指针,一个是当前的指针。

然后遍历当前的数组,

当遇到0时,把它往左移,即当前指针指向的数组和左指针指向的数组交换位置,然后左指针向右移,当前指针也向右移。

当遇到1时,元素不移动,只移动当前指针向右移即可。

当遇到2时,把它往右移,即当前指针指向的数组和右指针指向的数组交换位置,然后右指针向右移。

你好:我的2025