当前位置: 首页 > news >正文

移除元素(双指针)

27. 移除元素 - 力扣(LeetCode)

题目描述

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

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

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

样例输入

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]

 

题解

这道题使用双指针进行求解时,其思路其实刚好相反。

正常来讲,我们使用暴力解法时,需要判断当前元素与val是否相等,如果相等,我们就将该元素进行移除,移除的办法是通过将该元素后的所有元素均向前移动一个位置,将该重复的元素进行覆盖即可。

而使用双指针解法,本质上遍历nums,然后取出所有与val不相等的值,将其放入一个新的数组中,这样就变相的移除了数组中的所有值为val的元素。

因此我们首先需要一个遍历原数组nums的指针j,其作用是判断nums[i]是否与val相等,如果不相等就将该元素放到“新数组”中,因此在这里指针i起到的作用其实代表“新数组”中元素位置的下标,只不过在这里的“新数组”并不是我们开辟的实体数组,而是直接使用原数组进行构造

总结:

  • 指针j遍历原数组,取出与val不相等的元素,将其放入到指针i指向的元素下标中

代码

class Solution {
public:int removeElement(vector<int>& nums, int val) {int i=0;for(int j=0;j<nums.size();j++){if(nums[j]!=val)nums[i++]=nums[j];}return i;}
};

相关文章:

  • 目标检测回归损失函数(看情况补...)
  • 接收表单数据
  • HTTP 协议详解-上(Fiddler 抓包演示)
  • 【Redis】Redis与SSM整合Redis注解式缓存Redis解决缓存问题
  • android手机平板拓展电脑屏幕
  • 删数问题 (贪心)
  • 【星海出品】flask (四) 三方工具使用
  • 2.3 矩阵消元
  • 数据结构——时间复杂度和空间复杂度
  • Go并发编程(上)
  • PLC开放式以太网通信网络状态查看工具netstat
  • git拉取项目所有分支
  • 史上第一款AOSP开发的IDE (支持Java/Kotlin/C++/Jni/Native/Shell/Python)
  • 高效的测试覆盖率:在更短的时间内最大化提高测试覆盖率
  • STM32外设系列—MPU6050角度传感器
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • .pyc 想到的一些问题
  • JavaScript实现分页效果
  • mac修复ab及siege安装
  • Netty 框架总结「ChannelHandler 及 EventLoop」
  • SwizzleMethod 黑魔法
  • 大快搜索数据爬虫技术实例安装教学篇
  • 新版博客前端前瞻
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 走向全栈之MongoDB的使用
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • $().each和$.each的区别
  • (09)Hive——CTE 公共表达式
  • (安卓)跳转应用市场APP详情页的方式
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (推荐)叮当——中文语音对话机器人
  • (五)IO流之ByteArrayInput/OutputStream
  • (学习日记)2024.01.19
  • (原)本想说脏话,奈何已放下
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)EOS中账户、钱包和密钥的关系
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .net MySql
  • .Net Remoting常用部署结构
  • .NET 药厂业务系统 CPU爆高分析
  • .NET导入Excel数据
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .NET下的多线程编程—1-线程机制概述
  • @Data注解的作用
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • [ Linux ] Linux信号概述 信号的产生
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [APIO2012] 派遣 dispatching
  • [AutoSar]BSW_Com02 PDU详解
  • [Bugku]密码???[writeup]