Skip to main content

移除元素

题目

给你一个数组 nums 和一个值 val, 你需要原地移除所有数值等于 val 的元素, 并返回移除后数组的新长度. 不要使用额外的数组空间, 你必须仅使用 O(1) 额外空间并原地改输入数组.

提示:
  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100
示例

输入: nums = [3, 2, 2, 3], val = 3

输出: 2, 此时 nums 变成了 [ 2, 2, 2, 3 ]

解释: 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2. 你不需要考虑数组中超出新长度后面的元素.

题解

使用快慢指针, 题目跟 26. 删除排序数组中的重复项 题类似.

/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
var removeElement = function (nums, val) {
const n = nums.length
if (n === 0) return 0

let slow = 0,
fast = 0

while (fast < n) {
if (nums[fast] !== val) {
nums[slow] = nums[fast]
slow++
}

fast++
}

return slow
}