每天一题LeetCode[第十七天]

每天一题LeetCode[第十七天]


Remove duplicates from sorted array

Description:
Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this in place with constant memory.

For example,
Given input array nums = [1,1,2],

Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively. It doesn't matter what you leave beyond the new length.

翻译:

给有序数组,删除重复的数字并使得那些位置上的数字只出现一次,并返回新的数组长度。

 不要分配而外的空间用来存储数组,你必须用原来数组的内存
例子:[1,1,2] 你的函数应该返回长度2的数组,并且数组的前两个数字分别为1,2。 不用在意那些长度之外的数值。

解题思路:
  • 一开始。。。题目又理解错了,以为只要返回新的长度就好。后来看了Top Solution 才明白。。我又理解错了。最可怕的是,看明白了Top Solution才明白 这个答案真的 太棒了。 我讲下我的见解,两个指针i j, i用来遍历整个数组,j用来表示 在此之前的数字都是独立的,并且j这个位置表示当前最近一个唯一的数字下标。如何前进呢? 首先i j同时从 0开始。 条件:一旦ij 所指的数值不同则 更新 ++j位置上的值,为什么呢?因为一旦不相等 表示 又遇到一个新的唯一的数字 所以记录下来 。 最后注意的是,最后j 还要自增一次,因为,第一次不相等 表示是两个不同的数字 。

Java代码:
public class Solution {

    public int removeDuplicates(int [] nums){
        if(null==nums || nums.length==0){
            return 0;
        }
        int j=0;
        for(int i=0;i<nums.length;i++){
            if(nums[i]!=nums[j]) {
                nums[++j]=nums[i];
            }
        }
        return j;
    }
}

提高代码质量就是:积累精美的思路,优质的细节。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值