数据结构中数组:移除元素 双指针(快慢指针)

使用快慢指针解决移除元素问题:

对应力扣(27)链接:27. 移除元素 - 力扣(LeetCode)

题目要求:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

由于复杂度限制,这里我们考虑使用快慢指针来进行解决问题。

首先了解一下什么是快慢指针?

如图,我们首先定义    上面比较大的指针为快指针,下面较小的指针为慢指针,这两个指针默认初始位置都为0。快指针和慢指针有着不同的职责:

快指针:从起始位置0开始,+1一直指向下一个位置,直到最后元素

慢指针:收集除过要删除元素的所有元素(如果为要删除的元素则不收集,慢指针不动)

 

假设这里我们想要移除3,首先快慢指针均如上图位置位于位置0,由于快指针指向位置0处元素1不等于3,因此用慢指针进行收集,然后指向下一个目标处。

同理:使用慢指针收集此时的元素2。指针++

这里我们发现快指针已经指向3,因此不需要使用慢指针操作,慢指针不动,快指针++

 

 

 

由于此时快指针继续指向元素3,因此慢指针继续不动,快指针++

此时快指针指向4,不等于我们要删除的值,因此使用慢指针收集,慢指针++

 

 此时我们可以看到,慢指针收集的数组即为[1,2,3],此时返回慢指针索引即可(注:由于慢指针已经++操作,因此返回时不需要再进行+1操作)。

题目来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-element
 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值