您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页力扣算法27- 移除元素:双指针法和双重循环(级别:简单)

力扣算法27- 移除元素:双指针法和双重循环(级别:简单)

来源:华佗小知识

27-移除元素

题目

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。

示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

你不需要考虑数组中超出新长度后面的元素。

解法一:双指针法:

代码实现

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

解法二:双重for循环

使用两个for循环,外层循环找到目标值,如果数组中查找到了,就更新数组,就让数组查找到的位置整体向前移动一个单位,然后再进入内层循环查找

代码实现

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

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务