Leetcode 面试150题(二)
一、题目
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素。元素的顺序可能发生改变。然后返回 nums
中与 val
不同的元素的数量。
假设 nums
中不等于 val
的元素数量为 k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums
的其余元素和nums
的大小并不重要。 - 返回
k
。
二、思路
- 从前往后遍历:我们可以从数组的开头开始遍历,找到等于
val
的元素,并将其移到数组的末尾。 - 使用指针
k
:我们需要一个指针k
来记录不等于val
的元素的数量,同时也作为下一个不等于val
的元素应该放置的位置。
三、具体步骤
- 初始化指针
k
:设置k
为 0,表示当前不等于val
的元素的数量。 - 遍历数组:使用另一个指针
i
从头到尾遍历数组nums
。 - 判断元素:
- 如果
nums[i]
不等于val
,将nums[i]
放到nums[k]
的位置,并将k
加 1。 - 如果
nums[i]
等于val
,则跳过这个元素。
- 如果
- 返回结果:最终
k
就是不等于val
的元素的数量。
① JavaScript代码:
function remove(nums, val){
let k = 0;
for(let i =0;i<nums.length;i++){
if (nums[i]!==val){
nums[k]=nums[i];
k++;
}
}
return k;
}
② python代码:
def removeVal(nums,val):
k = 0
for i in range(len(nums)):
if nums[i] != val:
nums[k] = nums[i]
k += 1
return k