LeetCode 刷题 数据结构 数组 27 移除元素

news/2024/10/30 9:34:23/

难度:简单

给你一个数组 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

这道题如果是刚做完283移动零得话,思路就一摸一样。

class Solution {public int removeElement(int[] nums, int val) {// 简单思路:和283移动零的思路一样,只需要将非val的数组里的值依次放置到index=0开始的位置即可,最后index的值就是数组中非val的个数,也就是题目移除指定val后的数组长度// 时间复杂度:O(n)// 空间复杂度:O(1)int index = 0;for (int i = 0;i < nums.length; i++) {if (nums[i] != val) {nums[index++] = nums[i];}}return index;}
}

可以参考哔哩哔哩up主 爱学习的饲养员 的视频进行复盘。

up主视频讲解使用的是双指针算法来解决这道题的

 

class Solution {public int removeElement(int[] nums, int val) {// up主 爱学习的饲养员 双指针解法// 边界条件if (nums == null || nums.length ==0) {return 0;}int l = 0;int r = nums.length -1;while (l<r) {// 左指针寻找值等于val的索引while(l<r && nums[l] !=val) {l++;}// 右指针寻找值不等于val的索引while (l<r && nums[r] == val) {r--;}// 进行交换int temp = nums[l];nums[l] = nums[r];nums[r] = temp;}return nums[l] == val ? l :l+1;}
}

手把手带你刷Leetcode力扣|各个击破数据结构和算法|大厂面试必备技能【已完结】leetcode 27题 移除元素

 贴图看下up主双指针解法的执行情况


http://www.ppmy.cn/news/991462.html

相关文章

Unity UGUI的LayoutRebuilder的介绍及使用

Unity UGUI的LayoutRebuilder的介绍及使用 1. 什么是LayoutRebuilder&#xff1f; LayoutRebuilder是Unity UGUI中的一个组件&#xff0c;用于自动重建布局。它可以根据UI元素的变化&#xff0c;自动调整其子元素的位置和大小&#xff0c;以保持布局的一致性。 2. LayoutReb…

前缀和差分

前缀和 前缀和&#xff1a;一段序列里的前n项和 给出n个数&#xff0c;在给出q次问询&#xff0c;每次问询给出L、R&#xff0c;快速求出每组数组中一段L至R区间的和 给出一段数组&#xff0c;每次问询为求出l到r区间的和 普通方法&#xff1a;L到R进行遍历&#xff0c;那么…

【Vscode | R | Win】R Markdown转html记录-Win

Rmd文件转html R语言环境Vscode扩展安装及配置配置radian R依赖包pandoc安装配置pandoc环境变量验证是否有效转rmd为html 注意本文代码块均为R语言代码&#xff0c;在R语言环境下执行即可 R语言环境 官网中去下载R语言安装包以及R-tool 可自行搜寻教程 无需下载Rstudio Vscod…

linux---文件操作

1.文件路径定位 # /bin, /sbin, /lib, /lib64都以软链接的形式链接到/usr/目录下 /bin –> /usr/bin /sbin –> /usr/sbin lib -> usr/lib lib64 -> usr/lib64# 路径非常重要&#xff0c;名字一样&#xff0c;单不一定是一个文件# 相对路径: 相对于当前文件&#…

Unity UGUI的Outline(描边)组件的介绍及使用

Unity UGUI的Outline(描边)组件的介绍及使用 1. 什么是Outline(描边)组件&#xff1f; Outline(描边)组件是Unity UGUI中的一种特效组件&#xff0c;用于给UI元素添加描边效果。通过设置描边的颜色、宽度和模糊程度&#xff0c;可以使UI元素在视觉上更加突出。 2. Outline(描…

【leetcode】977. 有序数组的平方(easy)

给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组变为 […

linux nginx 布置方案

一、安装前的准备 1 安装编译工具&#xff08;nginx安装之前需要编译&#xff09; yum install -y gcc gcc-c2安装PCRE #2.1下载wget http://downloads.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz#2.2 解压tar -zxvf pcre-8.35.tar.gz#2.3进入目录cd pre-8.3…

ROS中使用RealSense-D435

文章目录 D435简介RealSense的SDK2.0安装方法1&#xff1a;直接利用安装源安装注册服务器公匙将服务器添加到存储库列表安装库 方法2&#xff1a;利用源码安装GitHub下载librealsense安装编译依赖运行脚本cmake编译 软件显示 ROS接口安装启动节点查看话题rviz显示点云 Python接…