可以使用双指针的方法来解决这个问题。定义两个指针 leftright,初始时 left 指向数组的起始位置,right 指向数组的末尾位置。

然后开始遍历数组,如果 nums[right] 等于 val,则将 right 指针左移,直到找到一个不等于 val 的元素。然后将该元素复制到 nums[left],同时 left 指针右移一位。

重复上述过程,直到 leftright 指针相遇。最后返回 left 指针的值即为新的数组长度。

以下是具体的实现代码:

function removeElement(nums, val) {
  let left = 0;
  let right = nums.length - 1;

  while (left <= right) {
    if (nums[right] === val) {
      right--;
    } else {
      nums[left] = nums[right];
      left++;
      right--;
    }
  }

  return left;
}

时间复杂度分析:该算法只需要遍历一次数组,所以时间复杂度为 O(n),其中 n 为数组的长度。

空间复杂度分析:该算法只使用了常数个额外变量,所以空间复杂度为 O(1)。

JavaScript 数组移除元素:原地移除所有等于给定值的元素

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

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