( 数组) 27. 移除元素 ——【Leetcode每日一题】

news2024/12/23 22:44:12

❓27. 移除元素

难度:简单

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

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

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

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}

示例 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]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

提示

  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100

💡思路:双指针

使用双指针遍历,l 从左往右遍历, h 用右往左遍历:

  • l 找到 val时,停下,当 h 找到不等于val 的时候停下,将 h 所指的数赋值给 l ;
  • 然后继续遍历,直到 l > h时停止;
  • 最后h 所指的就是新数组的最后一个元素;

🍁代码:(Java、C++)

Java

class Solution {
    public int removeElement(int[] nums, int val) {
        int n = nums.length;
        int l = 0, h = n - 1;
        while(l <= h){
            while(l < n && nums[l] != val) l++;
            while(h >= 0 && nums[h] == val) h--;
            if(l > h) break;
            nums[l++] = nums[h--];
        }
        return h + 1;
    }
}

C++

class Solution {
public:
    int removeElement(vector<int>& nums, int val) {
        int n = nums.size();
        int l = 0, h = n - 1;
        while(l <= h){
            while(l < n && nums[l] != val) l++;
            while(h >= 0 && nums[h] == val) h--;
            if(l > h) break;
            nums[l++] = nums[h--];
        }
        return h + 1;
    }
};

🚀 运行结果:

在这里插入图片描述

🕔 复杂度分析:

  • 时间复杂度 O ( n ) O(n) O(n),其中 n 为数组的长度。
  • 空间复杂度 O ( 1 ) O(1) O(1)

题目来源:力扣。

放弃一件事很容易,每天能坚持一件事一定很酷,一起每日一题吧!
关注我LeetCode主页 / CSDN—力扣专栏,每日更新!

注: 如有不足,欢迎指正!

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

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

相关文章

港联证券|“面值退”增多凸显A股市场化进程良性态势

近日&#xff0c;多家陷入“1元退市”危机的公司纷纷发布风险提示公告称&#xff0c;公司股票存在可能因股价低于面值被终止上市的风险。据《经济参考报》记者不完全统计&#xff0c;今年以来&#xff0c;沪深两市已有10余只个股锁定“面值退”&#xff0c;其中多以披星戴帽公司…

Navicat “1205 - Lock wait timeout exceeded; try restarting transaction“

标题标题&#xff1a;解决Navicat数据库操作报错&#xff1a;1205 - Lock wait timeout exceeded; try restarting transaction 导言&#xff1a; 在使用Navicat进行数据库操作时&#xff0c;有时会遇到错误代码为"1205 - Lock wait timeout exceeded; try restarting t…

JavaWeb10(实现结算查看订单订单详情)

目录 一.效果预览 二.实现思路 2.1 实现结算 ①形成订单&#xff0c;并赋值 ②将订单插入到数据表tb_order中&#xff0c;同时将该订单所对应的订单项插入到数据表tb_orderitem中 2.2 查看我的订单 ①底层代码 ②前端绑值 2.3 查看订单详情 ①页面跳转&#xff0c;传…

面试时,公司的什么表现让你一看就知道不靠谱?

01 面试的时候让你根据他们需要做方案的公司一律不靠谱&#xff0c;百分之99是套方案的。 你想如果业务负责人自己都不知道自己要干什么&#xff0c;要么他自己没想清楚&#xff0c;要不他本身是水货&#xff01;这样的leader怎么爬上来的不用说了吧&#xff0c;而且跟着他学不…

汽车EDI:如何与斯柯达Skoda建立EDI连接?

大众汽车在汽车行业具有全球销量领先、技术创新、质量标杆、多品牌战略和可持续发展方面的显著地位。作为一家具有全球影响力的汽车制造商&#xff0c;大众汽车在塑造汽车行业发展和引领未来出行方向方面扮演着重要角色。 目前我们已帮助汽车行业的客户成功对接大众汽车旗下的…

【MATLAB第35期】基于MATLAB的2023年改进的进化算法优化LSTM时间序列预测模型思路

【MATLAB第35期】基于MATLAB的2023年改进的进化算法优化LSTM时间序列预测模型思路 一、思路 拿第34期的棕熊算法举例&#xff1a; 优化途径&#xff1a; &#xff08;一&#xff09;种群初始学习改进 &#xff08;1&#xff09;反向学习(OBOA) &#xff08;2&#xff09;准反…

Electron 搭建开发环境(Windows 11系统)

目录 前言一、环境说明二、Node.js安装1.官网下载2.安装3.验证安装是否成功4.可能错误 三、开发工具1.开发工具2.VSCode 总结 前言 如果想要使用 Electron 进行桌面应用程序开发&#xff0c;首先需要搭建一个开发环境。对于初学者&#xff0c;这可能是一个绕不开的步骤。作为 …

MSP432学习笔记7:定时器A中断

型号&#xff1a;MSP432P401r 今日得以继续我的MSP432电赛速通学习之路...... 今日学习的是定时器A中断&#xff01; 目录 基础工程在此下载&#xff1a; 更改后的实验演示工程在此下载&#xff1a; 定时器A基础介绍&#xff1a; Timer_A的特性包括&#xff1a; Timer_A…

组态王使用指南|安装包|快速入门教程|含PLC与组态王网口串口通信|速查命令PDF

组态王安装包及安装方法&#xff1a; 组态王7.5 SP3下载安装授权_组态王安装包_城北许工α的博客-CSDN博客 组态王快速入门教程&#xff1a; 组态王教程(基础入门篇).pdf (book118.com) 组态王与PLC通讯&#xff1a; 网口通讯&#xff1a; 西门子1200与组态王TCP通讯 - 知…

Redis7实战加面试题-基础篇(Redis10大数据类型)

说明 刚看完尚硅谷Redis零基础到进阶&#xff0c;最强redis7教程&#xff0c;阳哥亲自带练&#xff08;附redis面试题&#xff09; 趁热打铁&#xff0c;根据脑图和视频&#xff0c;对视频中的知识点进行总结&#xff0c;方便以后复习 Redis入门概述 Remote Dictionary Serv…

国家重点研发计划“新型无液氦脑磁图系统研发”项目启动会顺利召开

2023年5月21日&#xff0c;国家重点研发计划“诊疗装备与生物医用材料”重点专项“新型无液氦脑磁图系统研发”项目启动会在京顺利召开。 该项目由北京未磁科技有限公司牵头&#xff0c;与首都医科大学附属北京天坛医院、北京航空航天大学、机械工业仪器仪表综合技术经济研究所…

九、数据仓库详细介绍(元数据)

元数据的文章&#xff0c;网上已经有很多了&#xff0c;元数据相关概念有限所以重复度很高。 我这里只是做个概念汇集&#xff0c;争取给大家介绍的全面一点。 1. 元数据定义 元数据&#xff08;Meta-data&#xff09;是描述数据的数据&#xff08;The data about data&#xf…

怎么提升品牌知名度,小红书母婴赛道分析

小红书平台自创立之初&#xff0c;便以母婴类内容为特色。今天我们来分享下&#xff0c;怎么提升品牌知名度&#xff0c;小红书母婴赛道分析。 一、妈妈用户仍是主流 我们都知道&#xff0c;小红书平台是一个女性用户为主的平台。根据去年的平台用户调查&#xff0c;可以发现&a…

PID控制逻辑基本介绍

PID控制逻辑基本介绍 1. 源由2. PID基本框图3. PID公式变换4. PID参数释义4.1 比例因子Kp4.2 比例积分Ki4.3 比例微分Kd4.4 Kp/Ki关系4.5 Kp/Kd关系 5. 总结6. 附录6.1 了解 PID 控制&#xff0c;第 1 部分&#xff1a;什么是 PID 控制&#xff1f;6.2 Anti-windup for PID con…

【pytorch损失函数(6)】Focal loss, for dense object detection再分析

之前翻译了这篇论文&#xff0c;但是理解还不深。今天借着研究rotation的计划&#xff0c;回顾这篇文章。 论文的主要贡献 Focal loss主要是为了解决目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重&#xff0c;也可理解为一种困难…

Segment Anything专题论文和代码汇总

文章目录 2023Scaling-up Remote Sensing Segmentation Dataset with Segment Anything ModelPersonalize Segment Anything Model with One ShotSegment Anything in Medical ImagesMatcher: Segment Anything with One Shot Using All-Purpose Feature MatchingCustomized Se…

【Python】mmSegmentation语义分割框架教程(1.x版本)

文章目录 0.引言1. 数据集设置1.1. dataset implementation py1.2. dataset config py 2.模型设置3.训练 0.引言 \qquad 本文是mmSegmentation语义分割框架教程&#xff08;0.x版本&#xff09;的1.x版本。不熟悉mmsegmentation是什么的读者可参考原文的引言部分&#xff0c;熟…

sqlmap命令大全(附详细扫描流程)

一、sqlmap命令大全。 -u 指定目标URL (可以是http协议也可以是https协议)-d 连接数据库--dbs 列出所有的数据库--current-db 列出当前数据库--tables 列出当前的表--columns 列出当前的列-D 选择使用哪个数据库-T 选择使用哪个表-C 选择使用哪个列--dump 获取字段中的数据--…

程序猿想考一个PMP,可以吗,怎么考呢?

我从新考纲考完下来&#xff0c;3A通过了考试&#xff0c;最开始也被折磨过一段时间&#xff0c;但是后面还是找到了方法&#xff0c;也算有点经验&#xff0c;给大家分享一下吧。 程序猿应该是考PMP里面人最多的&#xff0c;毕竟有一个30大坎&#xff0c;大部分人还是考虑转型…

rk3588 大小核启动

setenv ipaddr 10.12.1.205;setenv serverip 10.12.1.200;tftp 0x800000 bsprk3588_owl_ai_box_plus_v10_x64.bin;go 0x800000 rk3588 启动 4 核无问题&#xff0c;启动 8 核出现乱码以及死机问题。 分析代码&#xff0c;对 psci 接口进行更新&#xff0c;启动 4 核&#xf…