【js刷题:数据结构数组篇之移除元素】

移除元素

  • 一、题目
  • 二、思路
  • 三、方法
    • 1.暴力解法
    • 2.双指针法
      • 定义
      • 快指针和慢指针
      • 代码展示
  • 三、力扣刷题
    • 1.删除排序数组中的重复项

一、题目

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

二、思路

数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖

三、方法

1.暴力解法

两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组。但暴力解法的时间复杂度是O(n^2)。

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--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位           size--; // 此时数组的大小-1       }    } return size;};

2.双指针法

定义

通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。

快指针和慢指针

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

代码展示

//时间复杂度:O(n)
//空间复杂度:O(1)var removeElement = (nums, val) => {    //k是慢指针,i是快指针let k = 0;    for(let i = 0;i < nums.length;i++){                      if(nums[i] != val){            nums[k++] = nums[i]       }  }    return k;
};

三、力扣刷题

1.删除排序数组中的重复项

在这里插入图片描述
这道题不同的地方在于不再是给出一个目标值查找重复项进行删除,而是只要重复了的都要删除重复项,那么同样地,我们可以用双指针法,用快指针定义不包含重复元素的新数组,慢指针用来更新新数组的长度,只需要更改一下慢指针向后移动的条件就行了。因为条件是不重复的元素,所以只要快指针移动时后面一个元素跟前一个元素不重复,那么慢指针就可以更新移动。

 var removeDuplicates = function(nums) {   //如果数组长度为0则直接返回0,不需要用指针移动if(nums.length===0){       return 0   }//   let slow =0;   for(let fast=0;fast<nums.length;fast++){        if(nums[fast]!== nums[fast-1]){                 nums[slow++]=nums[fast]     }  }   return slow};

移除元素的其他力扣题解会持续更新,关注不迷路哦

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2868943.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

四连杆机构运动学仿真 | 【Matlab源码+理论公式文本】

【程序简介】&#x1f4bb;&#x1f50d; 本程序通过matlab实现了四连杆机构的运动学仿真编程&#xff0c;动态展现了四连杆机构的运动动画&#xff0c;同时给出了角位移、角速度和角加速度的时程曲线&#xff0c;除了程序本身&#xff0c;还提供了机构运动学公式推导文档&…

ffmpeg6.0从demux_decode.c源码探索解封装流程

前言 在播放器的播放视频、音视频媒体文件的推流等实际应用中,解封装(demux)这个操作是不可避免的,也是最基础的操作。 拿播放器播放MP4来说,如果想实现播放器视频画面的播放和音频声音的播放都需要经过这个解封装的步骤。因为MP4是一种媒体文件格式,是一种封装格式,M…

释放人工智能的力量:GPU服务器托管和高电机柜托管的关键作用

随着人工智能技术的不断发展&#xff0c;GPU服务器托管和高电机柜托管也变得愈发重要。这些技术在人工智能领域发挥着关键作用&#xff0c;为AI算法的训练和推理提供了强大的计算支持。 GPU服务器托管是指将GPU服务器放置在专门的数据中心中&#xff0c;通过云服务提供商提供的…

java基础入门day01

day01 java的特点 简单&#xff1a;摒弃了c和c的指针&#xff0c;垃圾回收机制&#xff0c;相对而言简单许多 安全&#xff1a;几乎各大银行都会使用java作为其开发平台 跨平台&#xff1a;可以运行在任何的操作系统之上&#xff0c;windows&#xff0c; linux以及mac平台&a…

安装snap再安装flutter再安装localsend@Ubuntu(FreeBSD下未成功)

Localsend介绍 localsend是一个跨平台的文件传送软件&#xff0c;可以在Windows、MacOS、Linux、Android和IOS下互相传送文件&#xff0c;只要在同一个局域网即可。 localsend官网&#xff1a;LocalSend 尝试安装localsend&#xff0c;发现需要使用flutter&#xff0c; 安装f…

PXVDI企业级PVE免费桌面虚拟化部署教程ProxmoxVE

什么是PXVDI&#xff1f; PXVDI是一款基于Proxmox VE为底层的可商用的免费云桌面套件。对熟悉PVE的人来说&#xff0c;这点非常的点赞。首先是PVE是免费的&#xff0c;其次PVE的免费云桌面方案也极为少数。 根据官方提出的价格清单&#xff0c;免费版和商业版在功能上主要的区…

class file has wrong version 61.0, should be 55.0

class file has wrong version 61.0, should be 55.0 一、Android Studio编译报错二、原因分析三、解决方案四、Java类文件版本号与Java版本之间的对应关系 一、Android Studio编译报错 /home/server/Desktop/T750U/FreemeCompass/src/com/freeme/compass/GradienterView.java…

我用Coze给自己的服务号加了一个多功能的GPT服务机器人

我用Coze给自己的服务号加了一个多功能的GPT服务机器人&#xff0c;可以查新闻&#xff0c;交互式回答问题&#xff0c;查快递&#xff0c;画图画&#xff0c;联网回答问题 可以查快递 试用&#xff1a;搜索觉醒AI

HTTPS证书很贵吗?

首先&#xff0c;我们需要明确一点&#xff0c;HTTPS证书的价格并不是一成不变的&#xff0c;它受到多种因素的影响。其中最主要的因素包括证书的类型、颁发机构以及所需的验证级别。 从类型上来看&#xff0c;HTTPS证书主要分为单域名证书、多域名证书和通配符证书。单域名证书…

自动点击脚本

一个简单的自动点击脚本 配置文件张这样&#xff0c;需要的自己截图 excel配置文件 #!/usr/bin/python3# sys.path.append("C:\\Users\苏\\.vscode\\extensions\\ms-python.vscode-pylance-2023.10.50\\dist\\typeshed-fallback\\stubs\\PyAutoGUI") # print(sys.…

串口数据包

一数据包的定义 串口数据包&#xff1a;通常使用的是额外添加包头包尾的这种方式 在HEX数据包里面&#xff0c;数据都是以原始的字节数据本身呈现的&#xff0c;而在文本数据包里面&#xff0c;每个字节就经过了一层编码和译码&#xff0c;最终表现出来的就是文本格式&#x…

电脑自带dll修复在哪里打开呢?马上教会你

由于各种原因&#xff0c;电脑可能会出现一些问题&#xff0c;其中之一就是dll文件丢失。Dll文件是动态链接库文件&#xff0c;它们包含了许多程序运行所需的函数和资源。当这些文件丢失或损坏时&#xff0c;可能会导致程序无法正常运行或出现错误提示。本文将介绍电脑dll文件丢…

计算机网络实训-2 网络设备配置基础

文章目录 一、交换机/路由器的内部组成二、接口类型及接口标识观察&#xff1a;交换机、路由器的外观交换机的接口标识交换机的接口标识举例 路由器的接口标识路由器的接口标识举例 三、配置交换机/路由器的方法通过Console口来配置&#xff08;带外管理&#xff09;通过telnet…

L1-072 刮刮彩票 分数 20 (巧用一维数组,数组加和)

啊啊啊啊啊啊啊啊明明就想出来了&#xff0c;明明就&#xff0c;就差这2分为什么为什么啊&#xff01;&#xff01;&#xff01;忘记当 tt 大于3小于6时应该 - 3 了&#xff0c;哎呦喂&#xff0c;三位的数组哪有4&#xff0c;5&#xff0c;6啊啊啊啊啊忘记减了&#xff0c;忘了…

【智能算法】CEC2005测试集

目录 1.背景2.CEC2005测试集3.代码实现4.参考文献 1.背景 IEEE 国际进化计算大会&#xff08;IEEE Congress on Evolutionary Computation&#xff0c;IEEE CEC&#xff09;是进化计算领域中规模最大、影响最重要的会议之一。为了公平评估算法的优化性能&#xff0c;该会议在优…

UCORE 清华大学os实验 lab0 环境配置

打卡 lab 0 &#xff1a; 环境配置 &#xff1a; 首先在ubt 上的环境&#xff0c;可以用虚拟机或者直接在windows 上面配置 然后需要很多工具 如 qemu gdb cmake git 就是中间犯了错误&#xff0c;误以为下载的安装包&#xff0c;一直解压不掉&#xff0c;结果用gpt 检查 结…

【Poi-tl Documentation】自定义行删除标签

前置说明&#xff1a; <dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.1</version> </dependency>模板样式&#xff1a; 删除行表格测试.docx 实现思路&#xff1a;通过定制占位…

基于springboot+vue实现疫情防控物资调配系统项目【项目源码】计算机毕业设计

基于springbootvue实现疫情防控物资调配系统演示 B/S结构的介绍 在确定了项目的主题和研究背景之后&#xff0c;就要确定本系统的架构了。主流的架构有两种&#xff0c;一种是B/S架构&#xff0c;一种是C/S架构。C/S的全称是Client/Server&#xff0c;Client是客户端的意思&am…

19-分支和循环语句_if语句switch语句(初阶)

19-1 概览 分支语句&#xff1a;if、switch 循环语句&#xff1a;while、for、do while goto语句 以上都属于控制语句 19-2 语句的分类 C语句可分为以下五类: 表达式语句、函数调用语句、控制语句、复合语句、空语句 19-3 结构 C语言是结构化的程序设计语言 顺序结构…

【ollama】(5):在本地使用docker-compose启动ollama镜像,修改模型存储位置,并下载qwen-0.5b模型,速度飞快

1&#xff0c;ollama项目 Ollama 是一个强大的框架&#xff0c;设计用于在 Docker 容器中部署 LLM。Ollama 的主要功能是在 Docker 容器内部署和管理 LLM 的促进者&#xff0c;它使该过程变得非常简单。它帮助用户快速在本地运行大模型&#xff0c;通过简单的安装指令&#xf…