力扣今日刷题

1.移除元素

在这里插入图片描述

在这里插入图片描述
🍎这一道题目要求就地移除目标元素,不能额外申请数组,很明显就是一道双指针题了。
🍌首先可以定义一个快指针(用来记录除去目标以外的其他元素),目的就是为了把所需要的元素给慢指针;那慢指针就是把快指针的值填入数组,再将目标值进行覆盖就行了。

class Solution {
    public int removeElement(int[] nums, int val) {
        //双指针 原地移除 后一个覆盖前一个
        //快指针找出所有需要的元素,然后再给慢指针,遇到与val一样的指进行跳过
        int l1 = 0;
        int l2 = 0;
        for(l1 = 0;l1<nums.length;l1++){
            //l1需要遍历完整数组,然后开始判断
            if(nums[l1] != val){
                nums[l2]=nums[l1];
                l2++;
            }
        }
        return l2;
    }
}

总结:①先用快指针遍历再目标元素筛选出
②再把需要的交给慢指针存放,把目标值覆盖住就行。

2.删除数组中重复的项

在这里插入图片描述

在这里插入图片描述
🍎原地操作,删除元素,双指针秒了
🍌这题和上题也比较类似,只是处理的元素的逻辑不咋一样而已。首先定义两个指针,慢指针为第一个数负责填冲快指针数据和删除逻辑,快指针为第二个数负责遍历数组,校验`当两个数不相同时,慢指针进入第二个数进行填充替换。

class Solution {
    public int removeDuplicates(int[] nums) {
        //前一个和后面一个对比相同就跳过
        int l1 = 1;
        int l2 = 0;
        if(nums == null||nums.length == 0) return 0;
        for(l1 = 1;l1<nums.length;l1++){
            if(nums[l1]!=nums[l2]){
                l2++;//只出现一次,所以直接跳到下一个位置就好了
                //然后进行赋值
                nums[l2]=nums[l1];
            }
        }
        return l2+1;
    }
}

总结:①快指针遍历数组先遍历,
②相同的先跳过,
等到不同时慢指针直接进入下一个位置直接填入覆盖数据就好了

小结

两道题目都是数组原地就地删除,都是用的双指针解法。锻炼的都是代码的实现的基本能力,希望大家多多重复,百炼成钢。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值