80. 删除有序数组中的重复项 II

package leetcode;

public class demo_80 {
    public int removeDuplicates(int[] nums) {
        int count=1;
        int length=nums.length;
        for(int i=1;i<length;i++) {
            //判断重复的个数
            if(nums[i]==nums[i-1]) {
                count=count+1;
            }
            else {
                //将之后的数往前移动
                if(count>2) {
                    for(int j=i;j<length;j++) {
                        nums[j-(count-2)]=nums[j];
                    }
                    //记录数组长度
                    length=length-(count-2);
                    //记录当前数组开始的位置
                    i=i-(count-2);
                }
                count=1;
            }
        }
        //如果最后面的数据重复个数也大于2,但没有数据替换,所以也要减去重复的个数
        if(count>2) {length=length-(count-2);}
        System.out.println(length);
        return length;
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        demo_80 d80=new demo_80();
        int[] nums= {0,0,0,1,1,1,2,3,3};
        d80.removeDuplicates(nums);
    }

}

 简化版

    public int removeDuplicates(int[] nums) {
        //记录当前当前的位置
        int index=0;
        for(int n:nums){
            if(index<2||n!=nums[index-2]){
                nums[index++]=n;
            }
        }
        return index;
    }

 

posted on 2021-06-19 11:32  一仟零一夜丶  阅读(44)  评论(0)    收藏  举报