27. 移除元素:JavaScript 遍历和双指针两种解法

js代码-双指针法 两数之和 立即下载

题目链接

LeetCode 27: https://leetcode-cn.com/problems/remove-element/

首先我们一起来看题目:

方法一

解题思路

  • 主要思路是遍历数组 nums,每次取出的数组元素为 num,设置初始下标为 ans。

  • 在遍历过程中,如果 num 与需要移除的值不同,则进行拷贝覆盖 nums[ans] = num,ans 自增 1。

  • 如果相同,则跳过该数字不进行拷贝覆盖,最后 ans 即为新的数组长度。

  • 这种思路适用于需要移除的元素较多时,最极端的情况是全部元素都需要移除,遍历一遍结束即可。

代码

/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    let ans = 0;
    for (const num of nums) {
        if (num != val) {
            nums[ans] = num;
            ans++;
        }
    }
    return ans;
};

复杂度分析:

  • 时间复杂度:

  • 空间复杂度:

方法二

解题思路

现在考虑数组包含很少的要删除的元素的情况。例如,,。之前的算法会对前四个元素做不必要的复制操作。另一个例子是 ,。似乎没有必要将 这几个元素左移一步,因为问题描述中提到元素的顺序可以更改。

因此,我们可以这样解本题:当我们遇到 nums[i] = val 时,我们可以将当前元素与最后一个元素进行交换,并释放最后一个元素。这实际上使数组的大小减少了 1。

请注意,被交换的最后一个元素可能是你想要移除的值。但是不要担心,在下一次迭代中,我们仍然会检查这个元素。

代码

/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    let ans = nums.length;
    for (i = 0; i < ans;) {
        if (nums[i] == val) {
            nums[i] = nums[ans - 1];
            ans--;
        } else {
            i++
        }
    }
    return ans;
};

复杂度分析:

  • 时间复杂度:

  • 空间复杂度:


A leetcode a day, make me happy all day.

看完三件事

如果你觉得本文对你有帮助,我想请你帮个忙:

  1. 转发本文或者点个「在看」,让更多的人也能看到这篇内容;

  2. 关注公众号「技术漫谈」,订阅更多精彩内容,获取更多学习资料;

  3. 可以在本公众号后台回复「加群」,加入技术群,与更多读者交流。



长按上方二维码关注公众号「技术漫谈」,订阅更多精彩内容。

你“在看”我吗?

leetcode两数之和JS双指针-DailyCoding:这是我使用Leetcode学习算法和数据结构的存储库 leet 两数之和JS双轨迹代码每日编码 这是记录我使用 Leetcode 学习算法和数据结构的存储库 :heart_suit: # 标题 解决方案 困难 代码类型 1 , 简单的 哈希表 11 中等的 15 , 中等的 双指针 17 中等的 20 简单的 21 简单的 22 中号 24 , 中等的 链表和三指针 25 难的 26 简单的 27 简单的 双指针 33 中等的 35 , 简单的 二分查找 46 中等的 47 中等的 56 中等的 在二维数组中排序 66 简单的 70 简单的 77 中等的 88 简单的 数组和双指针 94 中等的 二叉树 101 简单的 102 中等的 二叉树 141 , 简单的 双指针 142 , 中等的 双指针 144 中等的 二叉树 145 中等的 二叉树 189 简单的 206 , 简单的 215 中等的 242 , 简单的 按字符串排序 275 , 中等的 二分查找 283 , 简单的 344 简单的 双指针 540 , 中等的 二分查找 1528 , 简单的 按数组和字符串排序 立即下载

相关推荐

13个GNS3 3.0.5 appliances设备模板镜像合集:IOSv/L2,IOU L2/L3,以及IOS-XE

13个GNS3 appliances设备模板:IOSv/L2,IOU L2/L3,以及IOS-XE合集

haierccc的博客 1074

双指针(JavaScript)

遍历数组判断右指针的数是否为0,如果不是就跟左指针的数交换 并且左指针右移一个步长。移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]每次遍历右指针步长都+1,遍历完的数组就是答案。解题思路:根据题目意思写代码就好了。组成的新数组,要求也按。定义两根指针指向数组的开头。,编写一个函数将所有。

weixin_60629460的博客 584

Tube-based MPC完全指南:RCI集合构造与Matlab实现

模型预测控制(MPC)在实际工程中常因模型失配和外部扰动导致硬约束被突破,而鲁棒控制中的Tube-based MPC通过将单条预测轨迹扩展为“管道”集合,为不确定性提供了严格的安全边界。其核心在于利用鲁棒控制不变集(RCI)离线构造安全域,再结合在线标称MPC与反馈校正实现约束的硬保证。针对非线性系统,利普希茨条件为等效扰动的放大和RCI的构造提供了理论基础,使得算法既能保留非线性描述,又不牺牲在线计算效率。该方法适用于带扰动和参数漂移的机械系统、过程控制及嵌入式控制场景。本文以摩擦力非线性系统为例,从RC

weixin_32642109的博客 216

数组类算法js(双指针)

1.移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] 说明: 必须在原数组上操作,不能拷贝额外的数组。 尽量减少操作次数。 var moveZeroes = function(nums)...

MichaelAn的博客 539

工业自动化实战:用LabVIEW的DSC模块实现MODBUS-TCP设备控制

本文详细介绍了如何利用LabVIEW的DSC模块实现工业自动化中的MODBUS-TCP设备控制。通过环境准备、核心功能解析、状态机实现及典型工业场景实战,帮助工程师快速掌握稳定可靠的通讯技术,提升工业自动化系统的运行效率。

salt9的博客 1057

UE5.3.2 + VS2022社区版在Win11上的C++编译环境配置全解

Unreal Engine 5的C++开发依赖严格的工具链协同,其核心在于Visual Studio编译器版本、Windows SDK与引擎构建系统(UBT)的精准匹配。UE5.3.2强制要求MSVC v143.4(即VS2022 17.4+)及Windows 11 SDK 10.0.22621.0,任何偏差都会引发LNK2019链接失败、C1083头文件缺失或MSB8066构建中断等典型错误。该配置不仅关乎安装顺序,更涉及注册表清理、PATH环境变量、SDK路径注入与运行时DLL加载等底层机制。适用于Wi

weixin_33978722的博客 367

JavaScript 中的双指针

双指针(Two Pointers):指的是在遍历元素的过程中,不是使用单个指针进行访问,而是使用两个指针进行访问,从而达到各自的目的。

m0_52163529的博客 424

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装

基于 parallels ubuntu 20.04 LTS (focal) 的ros+px4+gazebo 安装。

weixin_40132006的博客 2241

Javascript-leetcode解法——双指针篇

思路:快慢指针,以快指针的指向为null时结束循环。快指针应比慢指针快走n+1步,以便删除节点。采用快慢双指针法, 慢指针负责遍历原数组所有元素,快指针负责记录删除后的新数组。思路:首先数组的内存空间地址是连续的,不能单独删除某个元素,只能覆盖。1、普通双指针:同向双指针(其实也就是双层for循环。取两条链表的长度差,对齐末尾,查找是否有相等的值。思路:注意,找链表相交值是找引用的相交值。3、快慢双指针:步调不一致的指针。2、对撞双指针:反方向双指针。思路:对撞双指针,交换值即可。02.07. 链表相交。

weixin_48447023的博客 709

光学设计仿真软件:Code V_(8).场曲和色差校正

通过以上步骤和代码示例,用户可以更好地理解如何在Code V中进行场曲和色差的校正。这些技术不仅有助于提高光学系统的成像质量,还可以为后续的光学设计提供重要的参考。在实际应用中,用户可以根据具体需求选择合适的校正方法和优化策略,以达到最佳设计效果。

kkchenjj的博客 1785

32GB Jetson Orin SOM 不能刷机问题排查

拿到了一个新的Orin SOM,当用orin Devkit CVB或定制的CVB不能用Linux_For_Tegra刷机,flash日志(JetPack5.0DP和5.0.1DP都失败了) 2. 确认mb2配置中将CVB的eeprom读取大小设置是否为0 ? 已经确认是正常的 在定制的orin cvb flash上使用Orin devkit som,启动是成功的。但新得到的Orin som并不工作可以排除理由:使用Orin Devkit CVB和Orin SOM(不是Devkit SOM)仍然不能

jzwjzw19900922的博客 1499

javascript算法之从会用到理解 - 双指针

javascript算法之双指针学习分享,理解原理,就发现,一些代码处理的更加优雅

乾复道 1019

Ubuntu零基础教学-如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

带你如何把Ubuntu20.04界面从英文修改为中文?| 超级详细,建议收藏

**My Coding Family** 5340

leetcode 27.移除元素(四种思路)

题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两...

优快云zhwk的博客 636

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【LeetCode-27】移除元素

暴力解法。

qq_41924536的博客 1101

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

leecode 每日一题 一起进步 27 移除元素 两种双指针

leecode 27 移除元素 两种双指针题目描述双指针双指针 题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], va...

clearlove_7的博客 321

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LeetCode 27题解析:双指针法移除数组元素

数组操作是算法基础中的核心内容,双指针技巧则是优化数组处理效率的经典方法。通过快慢指针协同工作,可以在O(n)时间复杂度内原地修改数组,移除指定元素。这种技术不仅适用于LeetCode题目,在日志过滤、数据清洗等实际工程场景中也广泛应用。本文以LeetCode第27题为例,详细解析暴力解法与双指针法的实现差异,特别针对面试高频考点——快慢指针的移动逻辑和边界条件处理进行深入探讨。掌握这种算法思想还能延伸解决删除重复项、移动零值等类似问题,是提升编程面试通过率的重要技能。

weixin_30596343的博客 355

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

LeetCode:27.双指针 移除元素

weiluguo123的博客 557

Leetcode每日一题复盘:27.移除元素

Leetcode每日一题复盘:37.移除元素 1.题目情景 题干:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 首先从题干里提取输入与输出 对于整个函数来说,输入的元素就是数组...

DEEP IN THE DARK 496

代码随想录刷题记录 | Day2-27 - 移除元素

leetocde 27 - 移除元素的两种解法以及心得

weixin_46922708的博客 550

【leetcode】Python+Javascript实现-27.移除元素

27.移除元素 给定一个数组和一个值,在这个数组中原地移除指定值和返回移除后新的数组长度。 不要为其他数组分配额外空间,你必须使用 O(1) 的额外内存原地修改这个输入数组。 元素的顺序可以改变。超过返回的新的数组长度以外的数据无论是什么都没关系。 示例 给定 nums = [3,2,2,3],val = 3, 你的函数应该返回 长度 = 2,数组的前两个元素...

神不烦 2253

算法记录|Day2 数组基础|移除元素

昨天还看了几道二分算法相关的题目,但是没有写总结(抄代码doge)。今天继续看完了移除元素的内容,相向双指针法多想了一会,开始有点不理解怎么这样赋值。

shanzexy的博客 507

LeetCode 27 移除元素 js

题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。

Suk__的博客 318

27. 移除元素【数组专题】Java\Python\JS\Go\C++

三轮遍历:slow=1,fast=2、num[fast]=2 不等于目标值 num[slow] = 2 新数组中元素[2,2] slow = 2。二轮遍历:slow=0,fast=1、num[fast]=2 不等于目标值 num[slow] = 2 新数组中元素[2] slow = 1。解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。输入:nums = [0,1,2,2,3,0,4,2], val = 2。输出:5, nums = [0,1,4,0,3,

sadsasdsdsdasda的博客 643

LeetCode题解 => 27.移除元素

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 输入 输出 nums = [3,2,2,3], val = 3, 2 nums = [0,1,2,2,...

余光的博客 697

27. 移除元素 JavaScript实现

题目链接 下面的方法使用的就是双指针的做法,left控制元素的覆盖,right控制元素的遍历

weixin_43466639的博客 279
上一篇: 167. 两数之和 II - 输入有序数组:JavaScript 双指针解法
下一篇: LeetCode 1122. 数组的相对排序:JavaScript 计数排序解法
LeviDing
博客等级 码龄10年 40粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值