day01 代码随想录算法训练营 27. 移除元素

发布时间 2023-12-29 14:21:01作者: 山雨欲來風滿楼

题目:

27. 移除元素

感悟:

  • 用快慢指针。
  • 本题是要原地删除。
  • 而删除这个行为在真实的计算机的数组里,是覆盖。
  • 所以,就用两个指针,(人)
  • 一个跑的快,一个跑的慢。他们身上带了个对讲机。
  • 跑的快的那个人负责检测后面的数字符合要求不,比如,要不等于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