题目:
感悟:
- 用快慢指针。
- 本题是要原地删除。
- 而删除这个行为在真实的计算机的数组里,是覆盖。
- 所以,就用两个指针,(人)
- 一个跑的快,一个跑的慢。他们身上带了个对讲机。
- 跑的快的那个人负责检测后面的数字符合要求不,比如,要不等于3的,遇到一个2,告诉跑的慢的说2符合要求。遇到一个3,告诉跑的慢的说3不符合要求。
- 跑的慢的那个人负责写入数据。接收到数据就写入。
- 最后都执行完了,返回慢指针那个位置就是新数组的长度,。
记忆点:
- 快慢指针,
- 想象修铁路的两个工人。用个对讲机传递。
难点:
- 理解删除是覆盖。这种思想。
- size 是len(nums)-1 因为要取到最后一个
- while <= 也是要取到最后一个。
- 当然也可以写成len(nums),while就要改成<
- 保持一致就可以。
代码示例:
class Solution:
def removeElement(self, nums: List[int], val: int) -> int:
fast = 0
slow = 0
size = len(nums) - 1
while fast <= size:
# 对讲机赋值
if nums[fast] != val:
nums[slow] = nums[fast]
slow +=1
fast+=1
return slow
通过截图:
资料:
题目链接:https://leetcode.cn/problems/remove-element/
文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP
标签:27,nums,随想录,len,https,移除,指针 From: https://www.cnblogs.com/liqi175/p/17934793.html