java删除有序数组中的重复元素_阿里巴巴高频题:删除排序数组中的重复数字...

4c965a8f030e3256ca1cc7937da0bcf8.png

题目描述

给定一个排序数组,在原数组中“删除”重复出现的数字,使得每个元素只出现一次,并且返回“新”数组的长度。

不要使用额外的数组空间,必须在不使用额外空间的条件下原地完成。

样例

样例 1:
输入: [] 输出: 0

样例 2:
输入: [1,1,2] 输出: 2 解释: 数字只出现一次的数组为: [1,2]

题目解析

由于有序,所以相同的数字排在一起。

用一个游标变量指向已经去重的部分的下一个空位,只要a[i] != a[i-1]a[i]!=a[i−1],就将a[i]填入之前的空位。

遍历一次数组,将不重复元素保留,重复元素被覆盖,最后删除末尾剩余的元素即可。

参考代码

public class Solution {
    public int removeDuplicates(int[] A) {
        if (A == null || A.length == 0) {
            return 0;
        }
        
        int size = 0;
        for (int i = 0; i < A.length; i++) {
            if (A[i] != A[size]) {
                A[++size] = A[i];
            }
        }
        return size + 1;
    }
}

点击LintCode进行在线评测


九章算法,硅谷一线工程师在线直播授课,已经帮助30000+人成功拿到心仪offer。

九章算法班,硅谷求职必备,你的面试官也曾上过这门课,点击立即报名试听

更多课程信息请访问:九章算法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值