力扣面试150题#3 26.删除有序数组中的重复项(java)

ps:本文章仅用来记录日常学习的所思所想,各位看到可取之处也可纳为己用,说的不对的地方还请多多指教。


1.题目做法

删除有序数组中的重复项

题目描述:


2.题目分析

        这道题跟上次做的移除元素非常相似,无非就是判断条件的不同。根据之前做的经验,我立马想到继续用双指针的方法做如下:

class Solution {
    public int removeDuplicates(int[] nums) {
        int n = nums.length;
        int back = 1;
        int font = 1;
        while(back < n){
            if(nums[back] != nums[back-1]){
                nums[font] = nums[back];
                font++;
            }
            back++;
        }
        return font;


    }
}

        要注意的点是抓住题目给的关键信息,nums是一个有序的数组,有序说明什么?说明重复的元素肯定都黏在一起,所以我们不需要想得太复杂,只需要设定一个在前面的指针负责记录新数组的长度(这不是跟上一题一样吗hhh),一个在后面的指针负责抓坏人(非重复的元素,严谨地说是具有唯一性的值)。

while(back < n){
            if(nums[back] != nums[back-1]){
                nums[font] = nums[back];
                font++;
            }
            back++;
        }

        关键代码部分,跟上次做的不一样的点首先是这次用了while循环,当然想用for循环也可以,我只是想来点不一样的。其次就是最最关键的判断部分,只有当后面指针所指的值不等于它前一个值才赋值给前面指针所指的值(重复的值都会留在原地不管了),并且前面指针加1(也就是新数组的长度加1),但是后面的指针一直在往前跑抓坏人以此达到形成新数组。


3.总结

        这道题的关键就是抓住nums是个有序数组并且可以想到重复元素都放在一起。其他的就是码字把自己的想法码出来了

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值