Java教程

学习更新2021年11月

本文主要是介绍学习更新2021年11月,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

2021-11-04

有的时候真的是坚持做一件事非常难,再而衰,三而竭。

L75. 颜色分类

L75. 颜色分类
双指针解法,最开始写了一个双指针解法,发现除了点儿问题。没考虑到二次交换的问题

//[1,2,0]
    public void sortColors(int[] nums) {
        //0的指针
        int z = 0;
        //2的指针
        int t = nums.length - 1;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) {

                //而前面0后面必定跟的是1,比如0,0,1,2,0
                // 当前i如果指向2,则2会交换到后面去,所以当前位置不可能出现交换后
                // 当前元素只有是0的时候会和前面的1交换,此时因为只可能是1,所以不存在二次交换的问题

                swap(nums, z++, i);
            } else if (nums[i] == 2 && i < t) {
                swap(nums, t--, i);
                //因为新换过来的数可能是0,那么久还可能再交换一次
                i--;
            }
        }
    }

    public void swap(int[] nums, int i, int j) {
        if (i == j) {
            return;
        }
        nums[i] = nums[i] ^ nums[j];
        nums[j] = nums[i] ^ nums[j];
        nums[i] = nums[i] ^ nums[j];
    }
这篇关于学习更新2021年11月的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!