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

news/2024/2/21 9:32:05

❓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.ppmy.cn/news/93786.html

相关文章

一道北大强基题背后的故事(一)——从走弯路到看答案

早点关注我&#xff0c;精彩不错过&#xff01; 在前面的系列文章《我的数学学习回忆录——一个数学爱好者的反思&#xff08;二&#xff09;》中&#xff0c;我从宏观层面回忆了我的数学学习历程和反思。其实&#xff0c;我和数学之间还有很多很多意识流一样的交流和故事&…

【Java校招面试】实战面经(八)

目录 前言一、线程几种状态以及什么时候产生调用sleep()后线程处于什么状态?二、loadClass和forName的区别三、字符流和字节流的区别四、观察者模式五、模板模式六、协程是什么?七、RPC框架和普通http有什么区别和优势? 基于Tcp封装还是http封装的?八、RPC是长连接吗?如果…

1.1. Java简介与安装

Java简介 Java是一种广泛使用的计算机编程语言&#xff0c;由James Gosling和他的团队在Sun Microsystems公司开发&#xff0c;于1995年首次发布。Java的设计理念是“一次编写&#xff0c;到处运行”&#xff0c;这意味着Java应用程序可以在任何支持Java运行时环境&#xff08…

Adobe推出了PS新功能Generative Fill(创成式填充);生成式 AI 将改变电脑架构;

&#x1f680; Adobe推出了PS新功能Generative Fill&#xff08;创成式填充&#xff09;&#xff0c;利用生成式AI来增删图像中的任何一处细节。 Adobe推出了PS新功能Generative Fill&#xff08;创成式填充&#xff09;&#xff0c;利用生成式AI来增删图像中的任何一处细节。…

NLP与GPT联合碰撞:大模型与小模型联合发力

目录标题 NLP是什么东西&#xff1f;Al大小模型联合发力 NLP是自然语言处理&#xff0c;而GPT是自然语言生成模型。 它们的联合碰撞结果是大模型与小模型联合发力&#xff0c;是因为大模型可以提供更好的语言理解和生成能力&#xff0c;而小模型则可以更快地进行推理和预测。 …

reduce()方法详解

一、 定义和用法 reduce() 方法将数组缩减为单个值。 reduce() 方法为数组的每个值&#xff08;从左到右&#xff09;执行提供的函数。 函数的返回值存储在累加器中&#xff08;结果/总计&#xff09;。 注释&#xff1a;对没有值的数组元素&#xff0c;不执行 reduce() 方法。…

第3章“程序的机器级表示”:程序编码 和 数据格式

文章目录 3.2 程序编码3.2.1 机器级代码3.2.2 代码示例3.2.3 关于格式的注解 3.3 数据格式 3.2 程序编码 假设写一个 C 程序&#xff0c;有两个文件 p1.c 和 p2.c。然后用 Unix 命令行编译这段代码&#xff1a; unix> gcc -O2 -o p p1.c p2.c命令 gcc 表明的就是 GNU C 编…

Python【数据分析第二阶段测试】

Python【数据分析第二阶段测试】 第一部分&#xff1a;SQL查询 数据库中有如下所示的表1&#xff08;tb_user&#xff09;和表2&#xff08;tb_recharge&#xff09;&#xff0c;其中表2包含了2021年一季度的用户充值数据。 表1&#xff1a;tb_user。 user_iduser_name1张三2李…

抖音seo源代码分享(前端+后端)

后端代码展示&#xff1a; $where [ [name > dvtv_s_id, oper > , value > $this->sid], [name > dvtv_dv_id, oper > , value > $dv_id], ]; $cache_model new App_Model_Douyin_MysqlVideoTempVideoStora…

Java 8新特性介绍

✅作者简介&#xff1a;热爱Java后端开发的一名学习者&#xff0c;大家可以跟我一起讨论各种问题喔。 &#x1f34e;个人主页&#xff1a;Hhzzy99 &#x1f34a;个人信条&#xff1a;坚持就是胜利&#xff01; &#x1f49e;当前专栏&#xff1a;Java新特性 &#x1f96d;本文内…

MYSQL 8 中间字段有NULL 值,还是无法走索引,所以我高估了MYSQL 的查询智商

开头还是介绍一下群&#xff0c;如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友会分到2群&#xff08;共…

Linux——进程优先级

1.什么是优先级&#xff1f; 优先级和权限息息相关。权限的含义为能还是不能做这件事。而优先级则表示&#xff1a;你有权限去做&#xff0c;只不过是先去做还是后去做这件事罢了。 2.为什么会存在优先级&#xff1f; 优先级表明了狼多肉少的理念&#xff0c;举个例子&#xff…

【05】Nginx之Rewrite功能配置

Rewrite是Nginx服务器提供的一个重要基本功能&#xff0c;是Web服务器产品中几乎必备的功能。主要的作用是用来实现URL的重写。 注意:Nginx服务器的Rewrite功能的实现依赖于PCRE的支持&#xff0c;因此在编译安装Nginx服务器之前&#xff0c;需要安装PCRE库。Nginx使用的是ngx…

Linux 下进行权限修改 chmod命令

查看权限 ls -l 文件名该命令可以查看文件的详细属性&#xff0c;包括文件的权限 权限含义 -rwxrwxrwx在文件系统中&#xff0c;user、group、others的权限是分开的&#xff0c;第一个rwx代表user的权限、第二个rwx代表group的文件、第三个rwx代表others的权限 字符含义值…

雅思备考经验!阅读 8.5,听力 8.5!

成绩单 先上热乎乎的成绩单截图&#xff08;2023.5.19 考试&#xff09;&#xff0c;偏科选手出来挨打&#xff01;好在小分都达到了要求~ 英语基础 大概是两三年前考过托福和 GRE&#xff0c;成绩过期了没办法&#xff0c;只能重考&#xff0c;这次试试雅思。 雅思和托福的…

5.27下周黄金行情走势预测及开盘操作策略

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周五(5月26日)黄金大幅下跌&#xff0c;主要受到美国数据影响&#xff0c;美国公布的4月PCE和耐用品订单数据向好&#xff0c;再次强化市场对美联储的鹰派押注。现货…

对 IC 验证有哪些深刻理解?十年资深经验工程师为你解读(二)

Q&#xff1a;要不要做门级仿真&#xff1f; A&#xff1a;如果是走 design-service&#xff0c;不知道最终带 sdf 的 netlist 仿真是否需要做&#xff0c;如果做的话&#xff0c; 最好在 release 综合后 netlist 的时候也做一下&#xff08;插完 scan-chain 和做完 CTS 以后有…

矿井水深度除氟装置CH-87的技术应用

今天&#xff0c;文章中会谈到的问题是关于煤化工废水深度处理除氟、总氮、砷等污染物工艺技术的拆解分析&#xff0c;用什么样的工艺技术能把矿井水中的氟、砷、总氮做到1个毫克升以下的标准符合达标排放&#xff1f;希望能对相关行业起到一定的帮助作用。我国是一个资源丰富的…

Java IO 流操作详解

Java IO 流操作详解 一、简介1. 什么是IO流2. IO流的分类3. IO流的作用 二、Java IO流的输入操作1. 文件输入流2. 字节输入流3. 缓冲输入流4. 对象输入流 三、Java IO流的输出操作1. 文件输出流2. 字节输出流3. 缓冲输出流4. 对象输出流 四、Java IO流的常用方法解析1. 字节读写…

MySQL业务并发减数量,数量未减

业务背景 最近在折腾老系统&#xff0c;折腾了好久&#xff0c;发现一个数据库问题&#xff0c;用户点赞数量&#xff0c;如果用户取消点赞情况下&#xff0c;正常情况10次取消数据库都返回成功&#xff0c;但其中有2次没有取消。 数据库场景 在MySQL中看下面一个场景。 业务…
最新文章