移除元素(双指针)

news2024/11/29 4:40:38

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://www.coloradmin.cn/o/1187728.html

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

相关文章

如何准备软考-软件设计师(上)

前言&#xff1a; 参加了2023年下半年的软考-软件设计师的考试&#xff0c;之所以参加这个考试&#xff0c;主要出于以下几个目的&#xff1a; 1.减税。虽然只有1500的额度&#xff0c;但是考虑到税率&#xff0c;其实也不少&#xff0c;而且也没有更好的省钱途径。 2.学习。…

Unit2_2:动态规划DP

文章目录 一、最长公共子序列分析填表伪代码过程时间复杂度 二、最长公共子串问题分析过程时间复杂度 最小编辑距离背景分析状态转移方程填表伪代码案例 一、最长公共子序列 子序列&#xff1a;指从原序列中选取出来的具有相对顺序的一组元素&#xff0c;而这些元素不一定是连…

内衣洗衣机和手洗哪个干净?家用小型洗衣机推荐

在最近的几年来&#xff0c;人们对生活和健康的追求越来越高&#xff0c;使得越来越多的内衣洗衣机也走进了我们日常生活的视线&#xff0c;许多研究显示&#xff0c;单纯只是手洗是不能彻底消除我们贴身衣物上的细菌&#xff0c;而机洗则可以有效地消除大部分的细菌&#xff0…

毫米波雷达技术在自动驾驶中的关键作用:安全、精准、无可替代

自动驾驶技术正以前所未有的速度不断演进&#xff0c;而其中的关键之一就是毫米波雷达技术。作为自动驾驶系统中的核心感知器件之一&#xff0c;毫米波雷达在保障车辆安全、实现精准定位和应对复杂环境中发挥着不可替代的作用。本文将深入探讨毫米波雷达技术在自动驾驶中的关键…

报错 documentation/kbuild: is a directory. stop(Windows 内置Linux子系统WSL编译Linux内核)

目录 背景 苦苦求索 解决方案 背景 Windows 10的内置子系统Linux 编译SDK,在clean 时出现的报错. 苦苦求索 网上很多说是文件名有空格, 这确实会导致这个问题. 所以要先排除目录,文件名没有空格的情况. 找到名字有空格的文件 find ./ -name "* *"若是没有输出…

Ubuntu安装步骤

点击文件 --> 新建虚拟机&#xff1a; 找到第一章下载的ubuntu镜像文件&#xff0c;然后下一步 自定义名称和位置&#xff0c;然后下一步 根据需要定内存&#xff0c;2G以上即可&#xff1a; 单个文件即可 点击完成 回车&#xff0c;然后等待安装 回车 回车 回车 按上下键找…

EF Core 数据库映射成实体类

首先在 NuGet 包管理器中安装三个包 Microsoft.EntityFrameworkCore.SqlServer 是一个用于与 SQL Server 数据库进行交互的实体框架核心包。这个包提供了方便的方法和工具&#xff0c;用于在 .NET Core 应用程序中操作 SQL Server 数据库。 Microsoft.EntityFrameworkCore.Too…

PTA_乙级_1008

首先&#xff0c;它翻转前部分&#xff08;0 到 N-M-1&#xff09;。 然后&#xff0c;它翻转后部分&#xff08;N-M 到 N-1&#xff09;。 最后&#xff0c;它整体翻转整个数组&#xff08;0 到 N-1&#xff09; #include<iostream> using namespace std;// 反转数组的…

ABAP 7.58更新概览

背景 ABAP 7.58对应的ABAP平台版本和S4HANA版本是2023&#xff0c;如果大家确定自己的系统版本&#xff0c;也可以通过SM51 release notes查看SAP Kernel参数值&#xff0c;与下图对应。 前言 ABAP 7.58更新了很多内容啊&#xff0c;对于CDS和ABAP restful programming mod…

基于SSM的广告管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

八个提升编程体验的VS Code插件

1.GitHub Copilot 安装链接&#xff1a;https://marketplace.visualstudio.com/items?itemNameGitHub.copilot GitHub Copilot 是开发人员的人工智能编码伴侣&#xff0c;可以实时提供代码建议。 这个扩展使编码变得轻而易举。这个扩展可以改善编码体验&#xff0c;提高生产…

在window10上安装Flink-1.18.0

一、Flink介绍 1、Flink是什么&#xff1a; Flink是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架。是一个大数据处理引擎的处理框架,是针对流进行的处理. 它是Apache 旗下的一个框架和分布式的处理引擎,用于对无界和有界的数据进行状态的计算。 …

没有数据,没有实验条件怎么发表SCI论文?欢迎参加孟德尔随机化方法培训班!!!...

孟德尔随机化是什么&#xff1f;怎么用孟德尔随机化方法撰写发表论文&#xff1f;郑老师团队开设的利用孟德尔随机化方法快速撰写SCI论文课程包含&#xff1a;孟德尔随机化方法的基本介绍、利用孟德尔随机化方法撰写论文的过程、讲课老师现身说法介绍从学习到论文发表路径、以及…

【Docker】iptables基本原理

在当今数字化时代&#xff0c;网络安全问题变得越来越重要。为了保护我们的网络免受恶意攻击和未经授权的访问&#xff0c;我们需要使用一些工具来加强网络的安全性。其中&#xff0c;iptables是一个强大而受欢迎的防火墙工具&#xff0c;它可以帮助我们控制网络流量并保护网络…

vtk夹角计算控件

开发环境&#xff1a; Windows 11 家庭中文版Microsoft Visual Studio Community 2019VTK-9.3.0.rc0vtk-example参考代码目的&#xff1a;学习与总结 demo解决问题&#xff1a;renderWindow中创建一个夹角测量控件&#xff0c;通过三个点确定一个夹角 典型的控件类继承关系&am…

超声波清洗机怎么选?优质清洁力强超声波清洗机推荐

清洁物品对于大部分朋友来说都是件麻烦事情&#xff0c;能不动手就不动手。眼镜清洗也是一样的道理&#xff0c;随着科技发展&#xff0c;一些智能小家电的出现给我们的生活带来很大便利&#xff01;超声波清洗机不仅能够清洗眼镜&#xff0c;还可以清洗首饰、化妆刷等生活中的…

大小仅为人血细胞的1/10?揭秘纳米机器人的厉害之处

原创 | 文 BFT机器人 纳米机器人是一种比血细胞小10倍的微型机器人&#xff0c;有望彻底改变医疗保健行业。纳米技术与下一代软件平台和监督机器学习相结合&#xff0c;提供了广泛的强大的诊断、监测和治疗工具。 纳米机器人&#xff08;nanorobots&#xff09;旨在执行非常具…

golang工程中间件——redis常用结构及应用(set,zset)

Redis 命令中心 这些篇文章专门以应用为主&#xff0c;原理性的后续博主复习到的时候再详细阐述 set 集合&#xff0c;为了描述它的特征&#xff0c;我们可称呼为无序集合&#xff1b;集合的特征是唯一&#xff0c;集合中的元素是唯一存在 的&#xff1b; 存储结构 元素都…

易点易动固定资产管理系统:定制流程与用量控制的高效管理利器

固定资产管理对于企业来说至关重要&#xff0c;而如何提高固定资产管理的效率和精确度一直是企业管理者关注的焦点。易点易动固定资产管理系统以其自定义固定资产流程和用量控制功能&#xff0c;成为了提升固定资产管理效率的利器。本文将详细介绍易点易动固定资产管理系统的自…

【技术驿站】分布式基础与常见面试问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…