从排序数组中删除重复项

2018-07-23  本文已影响51人  海人为记

从排序数组中删除重复项,给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

nums是以"引用"方式传递的.也就是说,不对实参做任何拷贝
在函数里修改输入数组对于调用者是可见的.
根据你的函数返回的长度,它会打印出数组中该长度范围内的所有元素

思路:根据题目的描述,我们不能使用第二个数组进行操作,只能将数组中的元素向前移动.
第一步:比较数组中元素跟前一个元素是否相同
第二步:如果相同,就将角标加一,在进行第一步的比较
第三步:如果不相同.就将该元素向前移动到跟你比较的元素的位置.

public class RemoveDuplicates {

    public int removeDuplicates(int[] nums) {

        int index = 1;
        for(int i = 0; i < nums.length; i++) {
            int a = nums[i];
            if(a!=nums[index-1]) nums[index++] = a;
        }
        return index;
    }
    public static void main(String[] args) {
        int[] nums = {0,0,1,1,1,2,2,3,3,4};
        RemoveDuplicates rd = new RemoveDuplicates();
        int len = rd.removeDuplicates(nums);
        for(int i = 0; i < len; i++) {
            System.out.print(nums[i]+" ");
        }
    }
}

上一篇下一篇

猜你喜欢

热点阅读