27. 移除元素 | 刷题打卡

77 阅读1分钟

一、题目描述

image.png

二、题目分析

题目说:“你不需要考虑数组中超出新长度后面的元素”, 意思就是,你在原数组中进行修改,返回出目标数组的长度,超过这个长度的数组项可以继续留在原数组,长度以内的项就是结果项。解题思路:

  1. 指向头尾的双指针
  2. 遇到等于val的项,就拿数组的末尾项覆盖它
  3. 末尾项搬到前面来了,将尾指针左移一位
  4. 如果遇到不同于val的项,左指针就+1,考察下一项
  5. 循环结束的条件是两个指针交叉相遇
var removeElement = (nums, val) => {
  let index = 0, last = nums.length - 1
  while (index <= last) {
    if (nums[index] === val) {
      nums[index] = nums[last]
      last--
    } else {
      index++
    }
  }
  return index
}