2021-04-06 82.删除排序数组中的重复项 II | 26. 删除有序数组中的重复项 [双指针]

这篇博客介绍了如何使用双指针技巧解决LeetCode上的两道经典问题:26题和82题。在26题中,通过维护两个指针pre和cur,确保数组中每个元素只出现一次。而在82题中,增加了条件,使得数组中连续相同的元素最多只能有两例。这两道题展示了双指针在处理数组去重问题上的应用。
摘要由CSDN通过智能技术生成

看这架势,估计LeetCode 这个月要是双指针专题了…lol

26. 删除有序数组中的重复项

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length<=1)
            return nums.length;
        // [0,pre[ 为原数组[0,cur]删除后最终的结果,即[0,pre[满足题目数组中每一个元素只出现1次的要求。
        // 每次待检查的部分为[cur,最后]
        int pre=1,cur=1;
        while(cur<nums.length){
            if(nums[cur]!=nums[pre-1]){
                nums[pre] = nums[cur];
                pre++;
            }
            cur++; // 如果相等就往后移动,找到第一个不同的元素或者走到底;不相等因为pre已经复制了cur的内容了,所以cur也要++
        }
        return pre;
    }
}

82. 删除排序数组中的重复项 II

class Solution {
    public int removeDuplicates(int[] nums) {
        if(nums.length<=2)
            return nums.length;
        int pre = 2 , cur = 2;
        while(cur<nums.length){
            // 如果不相同的话nums[pre-2]与nums[pre]一定不同,所以nums[pre]一样的元素最多有两个nums[pre]和nums[pre-1]
            if(nums[cur]!=nums[pre-2]){
                nums[pre] = nums[cur];
                pre++;
            }
            cur++;
        }
        return pre;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值