LeeCode75颜色分类(Java)(双指针)

题目链接:LeeCode75颜色分类
题目描述:在这里插入图片描述
遍历一遍数组将0全放到前面,2都放到后面就结束,但是可能会出现特殊情况:
1.例如{2,0,2,0,2}第一次将结尾的2换到开头之后i后移会丢失对i=0处2得定位,使题目出错。
2.还有一种样例:{1,2,0},1不动,2和零换变成{1,0,2}之后指针移动到2失去了对零的定位
解决:
第一种情况解决可以用while判断只要当前位置是2会一直分配位置。
第二种可以将对0的判断放在2判断之后,因为0一定是后面像前面换所以换0后不用考虑2的问题

public static void sortColors(int[] nums) {
        int l=0,r=nums.length-1;
        for (int i = 0; i < nums.length; i++) {
            while (r>i&&nums[i]==2){
                swap(nums,i,r--);
            }
            if(nums[i]==0){
                swap(nums,i,l++);
                continue;
            }
        }
    }
    public static void swap(int[] nums,int a,int b) {
        int temp=nums[a];
        nums[a]=nums[b];
        nums[b]=temp;
    }
相关推荐
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页