Skip to content

27. 移除元素【LeetCode 刷题日记】

记录自己从零开始刷 LeetCode,提高自己的数据结构与算法能力,为了获得更好的工作机会

数组 简单

题目:27. 移除元素
地址:https://leetcode.cn/problems/remove-element/description/?envType=study-plan-v2&envId=top-interview-150

解题情况

  • 自己读题后基本理解了题目意思然后知道如何解答,我最开始使用 for 循环 + splice(i, 1) 处理删除元素问题
  • 但是这个样子的问题是 splice 之后会导致索引变化,然后会跳过部分元素,所以部分测试用例未通过,使用从后往前循环即可解决
  • 但是仔细分析了一下,跳过的原因,发现是 splice 之后,nums 数组长度 -1,然后此时 i 继续 +1,导致会错位 1 个元素,因此我在 splice 之后就 i--,保证数组匹配时不错位即可

我的解答

  • 解法:暴力解法,for 循环 + splice
  • 时间复杂度:O(n),外层 for 循环次数,由 nums 长度决定
  • 空间复杂度:O(1),原地修改数组,未使用额外空间
javascript
var removeElement = function (nums, val) {
  for (let i = 0; i < nums.length; i++) {
    if (nums[i] === val) {
      nums.splice(i, 1);
      i--;
    }
  }
  return nums.length;
};

复盘

  • 我看其他很多解法都是用的双指针的方式,我最开始其实也没有想到如何用双指针,我第一反应还是使用 for 循环之类的暴力解法,这次整体还是顺利,只是最开始没有考虑到 splice 之后索引变化的问题会导致元素跳过,整体还是自己考虑的不完善

版权所有 © 2024 created by itchao