leetcode -> 探索初级算法:数组

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

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

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length == 0)
            return 0;
        int index = 0;
        int compares = nums[0];
        for(int i:nums) {
            if(i != compares) {
                nums[++index] = i;
                compares = i;
            }
        }
        return ++index;
    }
}

 * 一个变量index控制给数组第几位赋值

 * 一个变量compares控制赋的值是多少

 * 遍历的时候index从0开始,compares从数组第一个元素开始

 * 由于是排序数组,所以相同数总是连续出现

下面是数组变化过程:给出一个符合题意的数组如下

[1, 1, 1, 2, 2, 3, 5, 7, 7]  index=0  compares=1 第0位

[1, 1, 1, 2, 2, 3, 5, 7, 7]  index=0  compares=1 第1位

[1, 1, 1, 2, 2, 3, 5, 7, 7]  index=0  compares=1 第2位

[1, 1, 1, 2, 2, 3, 5, 7, 7]  index=0  compares=1 第3位;处理完后数组变为 [1, 2, 1, 2, 2, 3, 5, 7, 7] index=1 compares=2

[1, 2, 1, 2, 2, 3, 5, 7, 7]  index=1 compares=2 第4位;

[1, 2, 1, 2, 2, 3, 5, 7, 7]  index=1 compares=2 第5位;处理完后数组变为 [1, 2, 3, 2, 2, 3, 5, 7, 7] index=3 compares=3

[1, 2, 3, 2, 2, 3, 5, 7, 7] index=3 compares=3 第6位;处理完后数组变为 [1, 2, 3, 5, 2, 3, 5, 7, 7] index=4 compares=5

[1, 2, 3, 2, 2, 3, 5, 7, 7] index=3 compares=3 第7位;处理完后数组变为 [1, 2, 3, 5, 7, 3, 5, 7, 7] index=4 compares=7

[1, 2, 3, 5, 7, 3, 5, 7, 7] index=4 compares=7 第8位;

操作完毕,此时index=4,即处理到第4位,实际符合题意长度是index+1=5

12-20 16:54
查看更多