LeetCode移除元素
题目描述
给你一个数组 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 个元素后面的数据就是原来的数据, 不影响输出的正确性
