LC 27数组与双指针简单第 1 / 95 题

移除元素

Remove Element

双指针原地操作
本机进度仅保存在当前浏览器

题目描述

给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。要求不使用额外的数组空间,元素的相对顺序可以改变。

示例:nums = [3, 2, 2, 3],val = 3,输出新长度 2,且前两个元素为 [2, 2]。

解题思路

  1. 原地删除的通用套路是「快慢双指针」:慢指针指向下一个合法元素的写入位置,快指针负责扫描。
  2. 快指针读到的元素不等于 val 时,写入慢指针位置并右移慢指针;等于 val 时直接跳过。
  3. 由于写入位置永远不超前于读取位置,后面的元素覆盖前面的元素是安全的。

参考实现

查看参考实现Python · 建议先自行作答
def removeElement(nums, val):
    # slow 指向下一个合法元素的写入位置
    slow = 0
    for x in nums:
        if x != val:
            nums[slow] = x
            slow += 1
    return slow

复杂度与归属

时间复杂度O(n)
空间复杂度O(1)
所属分类数组与双指针
题源LeetCode 27

关联教程

返回题图鉴