首页 > 编程语言 > 详细

从排序数组中删除重复项

时间:2019-12-02 20:30:26      阅读:99      评论:0      收藏:0      [点我收藏+]

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

 

从排序数组中删除重复项

原文:https://www.cnblogs.com/exigeslover/p/11972786.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!