27. 移除元素【 力扣(LeetCode) 】

一、题目描述

  给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

  假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  1. 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  2. 返回 k。

二、测试用例

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2,_,_]
解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3,_,_,_]
解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。
注意这五个元素可以任意顺序返回。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

三、解题思路

  1. 基本思路:题目允许元素顺序发生改变,那么,可以使用不需要删除的元素来填充需要删除的元素,来避免移动大量元素。
  2. 具体思路:
    • 双指针:维护两个指针 i 和 k ,初始化为 0 。指针 i 用于遍历数组,寻找不需要删除的元素,指针 k 用处存放不需要删除的元素,每次指针 i 找到不需要删除的元素,便赋值给指针 k ,直到遍历结束。【最坏情况,遍历两次序列,指针 i 一次,指针 k 一次】
    • 快排思想:借助快排思想,将序列划分为左右两个部分,左边存放不需要删除的元素,右边存放需要的删除的元素。也是维护两个指针 i 和 k ,不过指针 i 初始化为 0 ,用于寻找需要删除的元素;指针 k 初始化为序列最后一个元素的位置,用于寻找不需要删除的元素;一旦两个指针都找到对应元素,便将指针 k 所指的元素赋值给指针 i ,然后继续寻找,直到两个指针相遇。【只遍历一遍序列】

四、参考代码

4.1 双指针

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

最好情况:遍历一遍序列,即删除全部元素,只有指针 i 移动。
最坏情况:遍历两遍序列,即不需要删除元素,指针 i 和 k 都需要移动

int removeElement(vector<int>& nums, int val) {int n=nums.size();int k=0;for(int i=0;i<n;i++){if(nums[i]!=val){nums[k++]=nums[i];}}return k;
}

4.2 快排思想

时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( 1 ) O(1) O(1)

最坏和最好情况都是遍历一遍序列。

int removeElement(vector<int>& nums, int val) {int k=nums.size()-1;int i=0;while(i<=k){while(i<=k&&nums[i]!=val) i++;while(i<=k&&nums[k]==val) k--;if(i>k) break;nums[i]=nums[k];k--;}return k+1;
}

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

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

相关文章

命令函安装库函数超时

pip3 install package_name -i https://pypi.tuna.tsinghua.edu.cn/simple package_name 替换成需要安装的函数

DNS劫持

目录 一、DNS的基本概念 二、DNS劫持的工作原理 三、DNS劫持的影响 四、DNS劫持的防范措施 DNS劫持&#xff1a;一种网络安全威胁的深入分析 在当今网络日益发达的时代&#xff0c;互联网已经成为了人们日常生活中不可或缺的一部分。然而&#xff0c;随着网络技术的进步&am…

**2024吉林省赛---E.ConnectedComponents(单调栈)

题目 给定一个&#x1d45b;个点的无向图以及参数数组&#x1d44e;1,&#x1d44e;2,...,&#x1d44e;&#x1d45b;与&#x1d44f;1,&#x1d44f;2,...,&#x1d44f;&#x1d45b;。&#x1d456;与&#x1d457; (&#x1d456;<&#x1d457;)有边当且仅当&#x1…

了解Linux中的shell脚本

目录 1、什么是shell 2、编写第一个shell文件 3、shell的权限 4、变量 5、 shell传递参数 6、shell数组 7、shell基本运算符 7.1 算术运算符 7.2 关系运算符 7.3 布尔运算符 7.4 逻辑运算符 7.5 字符串运算符 8、控制语句 8.1 if 8.2 for 8.3 while语句 9、其他 1、…

C#初级——条件判断语句和循环语句

条件判断语句 简单的条件判断语句&#xff0c;if()里面进行条件判断&#xff0c;如果条件判断正确就执行语句块1&#xff0c;如果不符合就执行语句块2。 if (条件判断) { 语句块1 } else { 语句块2 } int age 18;if (age < 18){Console.WriteLine("未…

Anaconda安装-超详细版(2023)

Anaconda安装 - 超详细版&#xff08;2023&#xff09; 前言&#xff1a;彻底卸载pythonAnaconda下载地址安装详细步骤配置环境变量检验安装是否成功更改conda源&#xff08;后续安装第三方库可以加快速度&#xff09;超详细彻底卸载Anaconda教程Tensorflow-gpu 安装 前言&…

ORBSLAM3 ORB_SLAM3 Ubuntu20.04 ROS Noetic 虚拟机镜像 下载

下图是build.sh 和 build_ros.sh编译结果截图&#xff1a; slam数据集测试视频&#xff1a; orbslam3 ubuntu20.04 test 下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1nre0Y9vig5QXIGU52qCLbQ?pwd9rbi 提取码&#xff1a;9rbi

【系列教程之】1、点亮一个LED灯

1、点亮一个LED灯 作者将狼才鲸创建日期2024-07-23 CSDN教程目录地址&#xff1a;【目录】8051汇编与C语言系列教程本Gitee仓库原始地址&#xff1a;才鲸嵌入式/8051_c51_单片机从汇编到C_从Boot到应用实践教程 本源码包含C语言和汇编工程&#xff0c;能直接在电脑中通过Keil…

代码解读2

未知 这段代码的主要目的是计算每个类别的特征中心点&#xff08;feature center&#xff09;&#xff0c;然后根据特征中心点与类别内特征的距离来计算密度&#xff08;density&#xff09;&#xff0c;接下来根据密度对每个类别进行划分。下面是针对每个主要步骤的详细解释&…

【iOS】内存五大分区

目录 堆&#xff08;Heap&#xff09;是什么五大分区栈区堆区全局/静态区常量区&#xff08;即.rodata&#xff09;代码区&#xff08;.text&#xff09; 函数栈堆和栈的区别和联系图解 OC语言是C语言的超集&#xff0c;所以先了解C语言的内存模型的内存管理会有很大帮助。C语言…

多线程总结(持续更新)

线程的优点 进程与线程的区别 创建线程三个方法 结束线程的两个常用方法 等待一个线程 join() 获取当前线程的引用 Java线程共有⼏种状态&#xff1f;状态之间怎么切换的&#xff1f; synchronized特点 volatile的特点 线程不安全问题及解决方案 wait() 和notify() 的作…

常识判断1

1.法律 &#xff08;1&#xff09;行政法 &#xff08;2&#xff09;刑法 3.新公务员法 &#xff08;4&#xff09;宪法 &#xff08;5&#xff09;民法 &#xff08;6&#xff09;监察法 &#xff08;7&#xff09;婚姻法 &#xff08;8&#xff09;反不正当竞争法

二次元手游《交错战线》游戏拆解

交错战线游戏拆解案 游戏亮点即核心趣味 一、关键词&#xff1a; 回合制游戏、二次元、机甲、横板、剧情、养成、异星探索。 二、游戏亮点&#xff1a; 符合目标群体审美的原画。 三、核心趣味&#xff1a; 抽卡、肝或者氪金解锁新皮肤。 核心玩法及系统规则 核心玩法&…

英特尔终于宣布了解决CPU崩溃和不稳定性问题的方法,声称过高的电压是根本原因;补丁预计将于8月中旬推出【更新】

英特尔终于宣布了解决CPU崩溃和不稳定性问题的方法&#xff0c;声称过高的电压是根本原因&#xff1b;补丁预计将于8月中旬推出【更新】 英特尔官方宣布&#xff0c;已找到困扰其CPU的崩溃问题的根本原因&#xff0c;并将于8月中旬前发布微码更新以解决这一问题&#xff0c;从而…

Godot游戏制作 02玩家1.0版

Unity大神&#xff0c;YouTube百万游戏开发者的启蒙老师&#xff0c;Brackeys&#xff0c;携 Godot 新手教程&#xff0c;正式回归。 转自&#xff1a;https://youtu.be/LOhfqjmasi0?si4RguI6-pXHZ2mk9K 资产&#xff1a;https://brackeysgames.itch.io/brackeys-platformer-b…

uniapp上传图片修改头像操作

handleAvator() {uni.chooseImage({count: 1,sizeType: [original, compressed], //可以指定是原图还是压缩图&#xff0c;默认二者都有sourceType: [album, camera], //从相册选择success: (res) > {uni.uploadFile({url: this.baseUrl /system/dooruser/avatar,filePath:…

SpringBoot3整合Druid报错Cannot load driver class: org.h2.Driver

报错显示springboot自带的H2数据库报错&#xff0c;其实是因为druid并未加载进去。如果你其它配置都没问题的话&#xff0c;请检查druid的依赖是什么版本的&#xff0c;因为springboot3刚开始是不支持druid的。 方案一&#xff1a; 即需要手动在resources目录下创建META-INF/s…

Pure Storage首席技术官:存储、网络及软件数据集规模上正迅速接近可扩展性的极限

Pure Storage的欧洲、中东和非洲地区&#xff08;EMEA&#xff09;首席技术官Alex McMullan认为&#xff0c;我们在存储、网络及软件数据集规模上正迅速接近可扩展性的极限。在本月伦敦的一次简报会上&#xff0c;McMullan阐述了Pure Storage对可扩展性问题的立场&#xff0c;包…

java算法day20

java算法day20 701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点108 将有序数组转换为二叉搜索树 本次的题目都是用递归函数的返回值来完成&#xff0c;多熟悉这样的用法&#xff0c;很方便。 其实我感觉&#xff0c;涉及构造二叉树的题目&#xff0c;用递归函数的返回值…

Stable Diffusion: 开启AI艺术创作的新纪元

在人工智能技术的不断演进中&#xff0c;Stable Diffusion作为一种新型的AI艺术生成模型&#xff0c;正在艺术创作和内容生产领域引起一场革命。Stable Diffusion通过深度学习技术&#xff0c;能够根据文本描述生成高质量、高分辨率的图像&#xff0c;为艺术家和设计师提供了一…