题目
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
例如
给定 nums = [0,1,2,2,3,0,4,2], val = 2,
函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。
解题思路
- 首先我们判定数组中nums中是否有val,,如果没有的话,我们就进入循环
- 然后我们就检索当前下标,从这个下标中删除当前元素。
- 直到我们检索数组中没有当前val的时候,我们就跳出循环,这时数组中所有和val相同的项已经全部删除。
- 之后我们返回这个数组的长度。
代码
- 话不多说我们直接上代码
function removeElement(nums, val) {
// 当数组中有val时进入循环,直到没有val
while(nums.indexOf(val) !==-1){
// 删除当前nums中和val相同的值
nums.splice(nums.indexOf(val),1);
}
// 返回改变后的长度
return nums.length;
};