可以使用双指针的方法来解决这个问题。

首先,我们定义两个指针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)

js实现 给你一个数组 nums 和一个值 val你需要 原地 移除所有数值等于 val 的元素并返回移除后数组的新长度。不要使用额外的数组空间你必须仅使用 O1 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

原文地址: https://www.cveoy.top/t/topic/iHGZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录