这是原题:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。
假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:
更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
返回 k。
原地移除,意味着不能定义新的变量。
只考虑消耗内存
也就是希望程序运行占用内存最小,代码如下:
var removeElement = function (nums, val) {nums.map((item, key) => {if (item == val) {nums.splice(key, 1);removeElement(nums, val)}})return nums.length
};
通过遍历数组,如果数组元素等于val,则用 splice 函数切掉该元素。这个方法不用声明任何额外的变量。运行占用的内存和执行时间如图所示:
只考虑执行时间
代码如下:
function removeElement(nums: number[], val: number): number {const n = nums.length;let left = 0;for (let right = 0; right < n; right++) {if (nums[right] !== val) {nums[left] = nums[right];left++;}}return left;
};
这段代码执行需要的时间和消耗内存如下图: