题目描述
- 给你一个数组
nums **和一个值 val,你需要 原地 移除所有数值等于 val **的元素,并返回移除后数组的新长度。
- 不要使用额外的数组空间,你必须仅使用
O(1) 额外空间并 原地 修改输入数组。
- 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
解题思路
- 第一种解法使用双指针法(快慢指针)
- 第二种解法妙用数组方法Array.prototype.splice()
解题代码(JavaScript)
var removeElement = function (nums, val) {
if (nums.indexOf(val) === -1) {
return nums.length;
}
let slow = -1;
let fast = 0;
let len = nums.length;
while (fast < len) {
if (nums[fast] !== val) {
slow++;
nums[slow] = nums[fast];
}
fast++;
}
return slow + 1;
};
更简洁的解题代码(JavaScript)
var removeElement = function (nums, val) {
let index = 0;
while (index < nums.length) {
if (nums[index] === val) {
nums.splice(index, 1);
} else {
index++;
}
}
return nums.length;
};