leetcode-75. 颜色分类]

75. 颜色分类

  • 荷兰国旗问题,直接分成三部分[0区,1区,2区]

    0区最右边为less指针,开始在0的左边 -1

    2区最左边为more指针,开始在数组最后一个数的右边 nums.length

    index为指针,当index没有超过more区的时候可以进行循环

    • nums[index] == 1,跳过index++

    • nums[index] == 0,就把0区下一位和当前index的数交换,index++

    • nums[index] ==2,就把2区的前一位和当前的index交换,当前index所在的数是2区前一位的数字,还没有进行比较,所以不用index++

    public void sortColors(int[] nums) {
        int less = -1;
        int more = nums.length;
        int index = 0;
        while(index < more){
            if(nums[index] == 1){
                index++;
            }else if(nums[index] == 0){
                swap(nums, index++, ++less);
            }else{
                swap(nums, index, --more);
            }
        }
    }

    public void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }

 

posted on 2022-10-10 00:18  老菜农  阅读(11)  评论(0编辑  收藏  举报

导航