题目描述
给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素。元素的顺序可能发生改变。然后返回 nums
中与 val
不同的元素的数量。
假设 nums
中不等于 val
的元素数量为 k
,要通过此题,您需要执行以下操作:
- 更改
nums
数组,使nums
的前k
个元素包含不等于val
的元素。nums 的其余元素和nums的大小并不重要。 - 返回
k
。
解题思路
通过遍历数组,将不等于 val
的元素复制到数组的前面来实现原地修改数组。最后返回的 ans
变量就是不等于 val
的元素的数量。
代码
/*** @param {number[]} nums* @param {number} val* @return {number}*/
var removeElement = function(nums, val) {let ans = 0;for(const num of nums) {if(num != val) {nums[ans] = num;ans++;}}return ans;
};
代码分析
- 初始化一个变量
ans
用来计数不等于val
的元素。 - 遍历数组
nums
中的每个元素num
。 - 如果当前元素
num
不等于val
,则将其复制到nums
数组的ans
索引处,并将ans
增加 1。 - 遍历完成后,
ans
就是数组中不等于val
的元素的数量。 - 返回
ans
。
这个函数的时间复杂度是 O(n)
,其中 n
是数组 nums
的长度,因为它需要遍历整个数组一次。空间复杂度是 O(1)
nums
的其余元素和 nums
的大小并不重要,所以k
个元素后面的数据就是原来的数据, 不影响输出的正确性