LeetCode:27.双指针 移除元素 JavaScript

本文介绍两种从数组中移除特定值的有效方法。方法一采用暴力解法,通过两层循环实现;方法二采用双指针法,仅用一层循环完成元素移除,效率更高。双指针法中,快指针负责查找新数组元素,慢指针用于更新数组。最终返回不含特定值的新数组长度。
摘要由CSDN通过智能技术生成

方法1:暴力解法,使用两次for循环

      var removeElement = function (nums, val) {
        for (var i = 0; i < nums.length; i++) {
          if (nums[i] === val) {
            for (var j = i + 1; j < nums.length; j++) {
              nums[j - 1] = nums[j];
            }
            nums.length--;
            i--;
          }
        }
        return nums.length;
      };

方法2:双指针法:一层for循环就可以了。

定义两个指针,一个快指针,一个慢指针。

  • 快指针:寻找新数组的元素 ,新数组就是不含有目标元素的数组
  • 慢指针:指向更新 新数组下标的位置

就是满数组就相当于刷子,快指针确认当前元素和val不相等之后,就被慢元素接受,作为新数组的值。慢元素指向下一个要判断的值。快数组是冲锋队,拿下一个阵地,满指针守住,再往前进一步,等待快指针再次传来好消息,知道快指针遍历完整个数组。如果这个元素不是,快指针向前移动一格,满指针不动,直到快指针传来值,我满指针再想起进一步。

注意这里返回的是新数组的长度,满指针是索引值,满指针是5的时候,arr[5]并不是新数组的内容。arr[0],arr[1],arr[2],arr[3],arr[4]就这5个item,所以长度和index的值一样,直接返回索引值就可以了。

     var removeElement = function (nums, val) {
        let slow = 0;
        for (let fast = 0; fast < nums.length; fast++) {
          if (nums[fast] !== val) {
            nums[slow] = nums[fast];
            slow++;
          }
        }

        return slow;
      };

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值