leetcode-数组-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。

    注意这五个元素可为任意顺序。

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

方法

  • 1.暴力法:判断元素是否等于目标值,如果是,则用JavaScript内置函数splice删除该元素,最后返回数组长度
  • 2.迁移法:从前往后遍历,建立一个索引值,将不等于目标值的元素按新索引值赋予给数组,返回新索引值

暴力法

    /**
     * JavaScript暴力法
     * @param {number[]} nums
     * @param {number} val
     * @return {number}
     */
    // 数组从后向前遍历
    var removeElement = function(nums, val) {
        // 思考:为什么从后往前移动
        // 提示:数组的变化
        for(let i = nums.length - 1; i >= 0; i--) {
            if (nums[i] === val) {
                // 删除原数组元素
                nums.splice(i, 1)
            }
        }
        return nums.length;
    };

    // 数组从前向后遍历
    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;
    };

迁移法

    var removeElement = (nums,val) => {
        let index = 0;
        for(let i = 0;i<nums.length;i++){
            if(nums[i] !== val){
                nums[index] = nums[i]
                index++
            }
        }
        return index;
    }

   转载规则


《leetcode-数组-27-移除元素》 朝飞 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
leetcode-数组-35-搜索插入位置 leetcode-数组-35-搜索插入位置
搜索插入位置题目描述(难度:简单) 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 你可以假设数组中无重复元素。 示例 1: 输入: [1,3,5,6],
2020-02-21
下一篇 
leetcode-数组-26-删除排序数组中的重复项 leetcode-数组-26-删除排序数组中的重复项
26. 删除排序数组中的重复项描述 给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
2020-02-20
  目录