@

前端与算法 leetcode 27.移除元素


题目描述

27.移除元素

概要

题目本身其实挺简单的,官方解答也说道了人们可能会对"就地"一次感到困惑,并认为在不复制数组的情况下从数组中删除元素是不可能的

提示

双指针,仅返回长度,元素顺序可以更改,元素很少时

解析

把题中的就地删除理解为覆盖,也就是说,只要我们找到一个和val一样的值,我们就把他覆盖掉,所以我们需要两个指针,一个快指针用来寻找和比较元素,一个慢指针用来覆盖元素,同时可以利用js的length的特性,在返回长度之前将数组的长度直接设置为我们计算的长度,这样的好处是我们可以直观的看到数组的结果,同时实现了真正意义上的修改原数组

算法

在这里考虑元素很少的情况,当nums[j]与给定的值不等时覆盖,相等时length--同时跳过该元素,也就是说最好的情况下,数组内所有元素都与参数相等,那么length自减到0同时直接返回0,最坏的情况下所有元素都不等,全部覆盖的同时返回length的,正常情况只要nums[j]!==val,我们就把他覆用j指向的数值覆盖掉,并递增i,重复这个过程一直到j到达数组的末尾,数组的新长度为length

/**
* @param {number[]} nums
* @param {number} val
* @return {number}
*/
const removeElement = (nums, val) => {
if (nums.length === 0) return 0
let { length } = nums
let [i, j] = [0, 0]
while (j < nums.length) {
if (nums[j] !== val) {
nums[i] = nums[j]
i++
} else {
length--
}
j++
}
nums.length = length
return length
}

传入[1, 3, 9, 6]和3的运行结果

3
[ 1, 9, 6 ]

执行结果

执行用时 :64 ms, 在所有 javascript 提交中击败了91.87% 的用户
内存消耗 :33.7 MB, 在所有 javascript 提交中击败了33.58%的用户

前端与算法 leetcode 27.移除元素的更多相关文章

  1. Java实现 LeetCode 27 移除元素

    27. 移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额 ...

  2. [Leetcode]27. 移除元素

    题目描述: ++难度:简单++ 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 ...

  3. Leetcode 27.移除元素 By Python

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  4. leetcode 27. 移除元素(python)

    1. 题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外 ...

  5. [LeetCode]27.移除元素(Java)

    原题地址: remove-element 题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必 ...

  6. 【LeetCode】27.移除元素

    27.移除元素 知识点:数组:双指针:: 题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必须 ...

  7. 前端与算法 leetcode 28.实现 strStr()

    # 前端与算法 leetcode 28.实现 strStr() 题目描述 28.移除元素 概要 这道题的意义是实现一个api,不是调api,尽管很多时候api的速度比我们写的快(今天这个我们可以做到和 ...

  8. 前端与算法 leetcode 350. 两个数组的交集 II

    目录 # 前端与算法 leetcode 350. 两个数组的交集 II 题目描述 概要 提示 解析 解法一:哈希表 解法二:双指针 解法三:暴力法 算法 # 前端与算法 leetcode 350. 两 ...

  9. 前端与算法 leetcode 283. 移动零

    目录 # 前端与算法 leetcode 283. 移动零 题目描述 概要 提示 解析 解法一:暴力法 解法二:双指针法 算法 传入[0,1,0,3,12]的运行结果 执行结果 GitHub仓库 # 前 ...

随机推荐

  1. iOS应用代码注入防护

    在应用开发过程中,我们不仅仅需要完成正常的业务逻辑,考虑应用性能.代码健壮相关的问题,我们有时还需要考虑到应用安全的问题.那么应用安全的问题涉及到很多方面.比如防止静态分析的,代码混淆.逻辑混淆:防止 ...

  2. jquery ajax在ie9下跨域不执行 crossDomain: true == !(document.all)

    <!DOCTYPE html> <html> <head> <title>jQuery CORS in IE7 - IE10</title> ...

  3. re.sub 实现多处替换

    1   | 表示或的意思 将所有字母替换掉 result_content = re.sub('a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z', ...

  4. Javascript搞笑图,哈哈哈哈

  5. A`>G?~C009

    A`>G?~C009 这场怎么才5题...看完猫的提交记录以为猫猫没写这场F A Multiple Array 直接做 B Tournament 直接树d C Division into Two ...

  6. Oncomine 数据库

    网址  https://www.oncomine.org/resource/login.html Oncomine 是目前世界上最大的癌基因芯片数据库和整合数据挖掘平台,旨在挖掘癌症基因信息.Onco ...

  7. GIT-本地仓库

    用户配置 git config --global user.name "name" git config --global user.email "123@qq.com& ...

  8. 你向 Mysql 数据库插入 100w 条数据用了多久?

    阅读本文大概需要 2 分钟. ▌目录 多线程插入(单表) 多线程插入(多表) 预处理 SQL 多值插入 SQL 事务( N 条提交一次) ▌多线程插入(单表) 问:为何对同一个表的插入多线程会比单线程 ...

  9. js浮点数精度丢失问题及如何解决js中浮点数计算不精准

    js中进行数字计算时候,会出现精度误差的问题.先来看一个实例: console.log(0.1+0.2===0.3);//false console.log(0.1+0.1===0.2);//true ...

  10. linux Ubuntu Centos 增加 TCP 连接数

    https://blog.csdn.net/c359719435/article/details/80300433 查看max conn: cat /proc/sys/net/core/somaxco ...