js实现 给你一个数组 nums 和一个值 val你需要 原地 移除所有数值等于 val 的元素并返回移除后数组的新长度。不要使用额外的数组空间你必须仅使用 O1 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
可以使用双指针的方法来解决这个问题。
首先,我们定义两个指针i和j,初始时i和j都指向数组的第一个元素。
然后,我们开始遍历数组,当遇到元素等于val时,将j指针后移一位,直到遇到一个元素不等于val的位置。
然后,将j指向的元素赋值给i指向的位置,并且将i指针后移一位。
重复上述过程,直到遍历完整个数组。
最后,返回i指针的值,即为移除元素后数组的新长度。
下面是具体的实现代码:
function removeElement(nums, val) {
let i = 0;
for (let j = 0; j < nums.length; j++) {
if (nums[j] !== val) {
nums[i] = nums[j];
i++;
}
}
return i;
}
时间复杂度分析:这个算法只需要遍历一次数组,所以时间复杂度为O(n),其中n是数组的长度。
空间复杂度分析:这个算法只需要常数级别的额外空间,所以空间复杂度为O(1)
原文地址: https://www.cveoy.top/t/topic/iHGZ 著作权归作者所有。请勿转载和采集!