数组类26--删除重复数字(E)

2019-08-12  本文已影响0人  干LeetCode

给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

AC代码

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums == null || nums.length == 0) {
            return 0;
        }
        if(nums.length == 1) {
            return 1;
        }
        int cur = nums[0];
        int step = 0;
        int ans = 1;
        // int len = nums.length;
        for(int i = 1; i < nums.length; i++) {
            //计数
            if(nums[i] == cur) {
                step++;
                // len--;
                continue;
            }
            ans++;
            cur = nums[i];
            //移动
            for(int j = i; j < nums.length; j++) {
                // nums[j - step] = nums[j];
                for(int k = 1; k <= step; k++) {
                    nums[j - k] = nums[j];
                }
            }
            i = i - step;
            step = 0;
        }
        return ans;
    }
}

比较笨的方法,效率不高
评论区大佬代码,思路很好,用两个指针,一个指向当前,另一个指向待定的,如果不相等则赋值

class Solution {
    public int removeDuplicates(int[] nums) {
        // 使用双指针
        if(nums==null || nums.length == 1){
            return nums.length;
        }
        int i = 0,j =1;
        while(j<nums.length){
            if(nums[i]==nums[j]){
                j++;
            }else{
                i++;
                nums[i]=nums[j];
                j++;
            }
        }
        return i+1;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读