【前端算法每日一题】leetcode-034-移除元素

60 阅读1分钟

题目描述

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

解题思路

  • 第一种解法使用双指针法(快慢指针)
    • 快指针进行遍历
    • 慢指针记录符合的下标
  • 第二种解法妙用数组方法Array.prototype.splice()

解题代码(JavaScript)

var removeElement = function (nums, val) {
  if (nums.indexOf(val) === -1) {
    return nums.length;
  }
  let slow = -1;
  let fast = 0;
  let len = nums.length;
  while (fast < len) {
    if (nums[fast] !== val) {
      slow++;
      nums[slow] = nums[fast];
    }
    fast++;
  }
  return slow + 1;
};

更简洁的解题代码(JavaScript)

var removeElement = function (nums, val) {
  let index = 0;
  while (index < nums.length) {
    if (nums[index] === val) {
      nums.splice(index, 1);
    } else {
      index++;
    }
  }
  return nums.length;
};