移除元素
Remove Element
本机进度仅保存在当前浏览器
题目描述
给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。要求不使用额外的数组空间,元素的相对顺序可以改变。
示例:nums = [3, 2, 2, 3],val = 3,输出新长度 2,且前两个元素为 [2, 2]。
解题思路
- 原地删除的通用套路是「快慢双指针」:慢指针指向下一个合法元素的写入位置,快指针负责扫描。
- 快指针读到的元素不等于 val 时,写入慢指针位置并右移慢指针;等于 val 时直接跳过。
- 由于写入位置永远不超前于读取位置,后面的元素覆盖前面的元素是安全的。
参考实现
查看参考实现Python · 建议先自行作答
def removeElement(nums, val):
# slow 指向下一个合法元素的写入位置
slow = 0
for x in nums:
if x != val:
nums[slow] = x
slow += 1
return slow