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

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

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

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

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

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

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

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

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

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

数据结构中数组:移除元素 双指针(快慢指针)_第1张图片

 

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

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

数据结构中数组:移除元素 双指针(快慢指针)_第2张图片

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

 

 

数据结构中数组:移除元素 双指针(快慢指针)_第3张图片

 

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

数据结构中数组:移除元素 双指针(快慢指针)_第4张图片

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

数据结构中数组:移除元素 双指针(快慢指针)_第5张图片

 

数据结构中数组:移除元素 双指针(快慢指针)_第6张图片

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

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

 

你可能感兴趣的:(数据结构,c++,leetcode,c语言,java)