27.移除元素(力扣LeetCode)

文章目录

  • 27.移除元素(力扣LeetCode)
    • 题目描述
    • 方法一:vector成员函数:erase
    • 方法二:暴力解法
    • 方法三:双指针法

27.移除元素(力扣LeetCode)

题目描述

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

提示:

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

方法一:vector成员函数:erase

class Solution {
public:int removeElement(vector<int>& nums, int val) {// 循环遍历 vector 中的元素for(int i = 0; i < nums.size(); i++){// 检查当前元素是否等于目标值 valif(nums[i] == val){// 如果等于,使用 erase 方法移除当前位置的元素// nums.begin() + i 计算出当前需要删除元素的迭代器位置nums.erase(nums.begin() + i);// 由于元素已经被移除,后面的元素都向前移动了一个位置// 为了在下一次迭代中检查新移动到这个位置的元素,需要将索引 i 减去 1// 这样在循环的下次迭代中,i++ 将抵消这一减法操作,i 的值实际上不变i--;}}// 返回修改后的数组长度return nums.size();}
};

方法二:暴力解法

在这里插入图片描述

class Solution {
public:int removeElement(vector<int>& nums, int val) {// 获取输入数组的大小int size = nums.size();// 遍历数组的每个元素for (int i = 0; i < size; i++){// 如果当前元素等于给定的值 valif (nums[i] == val){// 移动当前元素之后的元素来覆盖当前元素for (int j = i; j < size - 1; j++)nums[j] = nums[j + 1];// 由于移除元素后数组大小减小,更新迭代变量i和数组大小size// i-- 是因为移除元素后,新的元素会填补到当前位置// 我们需要在下一次迭代中再次检查这个新的位置i--;size--;}}// 返回修改后数组的新长度return size;}
};

方法三:双指针法

// 定义解题类 Solution
class Solution {
public:// 定义 removeElement 成员函数,接受一个整数类型的 vector 引用和一个整数 val// vector<int>& 表示引用传递,所以对 nums 的修改将反映到原始数组上int removeElement(vector<int>& nums, int val) {// 定义一个慢指针 slow,用于跟踪在新数组中填充的位置int slow = 0;// 使用快指针 fast 遍历数组中的每个元素for(int fast = 0; fast < nums.size(); fast++) {// 检查快指针指向的当前元素是否不等于 valif(nums[fast] != val) {// 如果当前元素不等于 val,则将其复制到慢指针 slow 的位置// 这是因为慢指针指向的位置是用于在数组内保存不等于 val 的元素的nums[slow++] = nums[fast];// 在复制元素后,增加慢指针 slow,以便下一次找到不等于 val 的元素时// 可以将其放在新数组的下一个位置}}// 循环结束后,慢指针 slow 的值即为新数组的长度// 这是因为所有不等于 val 的元素都已经被复制到数组的前部// 并且 slow 指向了第一个未被使用的数组位置return slow;}
};

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

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

相关文章

[每日一题] 01.24 - 求三角形

求三角形 n int(input()) count1 (1 n) * n // 2 count2 n * n lis1 [str(i).zfill(2) for i in range(1,count1 1)] lis2 [str(i).zfill(2) for i in range(1,count2 1)]for i in range(0,len(lis2),n):print(.join(lis2[i:i n]))print()for i in range(1,n 1):tem…

代码中遇到的问题

编译器错误消息&#xff1a; CS1061&#xff1a; default_aspx 不包含 GridView1_SelectedIndexChanged 的定义&#xff0c;并且找不到接受类型为default_aspx的第一个参数的可访问扩展方法GridView1_SelectedIndexChanged&#xff08;是否缺少 using 指令或程序集引用&#xf…

[笔记]Spring AOP

Spring AOP&#xff08;Aspect Oriented Programming&#xff09; AOP将应用程序分为核心业务和非核心的公共功能&#xff0c;AOP的关注点是系统中的非核心的公共功能&#xff1b; AOP可以通过预编译或者运行期动态代理的方式&#xff0c;为横跨多个对象&#xff08;没有继承关…

UCAS-AOD遥感旋转目标检测数据集——基于YOLOv8obb,map50已达96.7%

1.UCAS-AOD简介 1.1数据说明 遥感图像&#xff0c;又名高分辨率遥感图像。遥感图像的分类依据是根据成像的介质不同来进行分类的。UCAS-AOD (Zhu et al.&#xff0c;2015)用于飞机和汽车的检测&#xff0c;包含飞机与汽车2类样本以及一定数量的反例样本&#xff08;背景&…

【立创EDA-PCB设计基础】6.布线铺铜实战及细节详解

前言&#xff1a;本文进行布线铺铜实战及详解布线铺铜的细节 在本专栏中【立创EDA-PCB设计基础】前面完成了布线铺铜前的设计规则的设置&#xff0c;接下来进行布线 布局原则是模块化布局&#xff08;优先布局好确定位置的器件&#xff0c;例如排针、接口、主控芯片&#xff…

k8s-基础知识(Pod,Deployment,ReplicaSet)

k8s职责 自动化容器部署和复制随时扩展或收缩容器容器分组group&#xff0c;并且提供容器间的负载均衡实时监控&#xff0c;即时故障发现&#xff0c;自动替换 k8s概念及架构 pod pod是容器的容器&#xff0c;可以包含多个container pod是k8s最小可部署单元&#xff0c;容器…

基于python和定向爬虫的商品比价系统实现

目录 前言 一、系统设计 1. 系统需求分析 2. 系统设计思路 二、系统实现 1. 爬虫部分 2. 比价部分 3. 完整系统代码 三、系统优化 1. 多线程爬取 2. 引入数据库 四、总结 前言 商品比价系统是一种可以帮助用户快速找到最优价格商品的系统。本文将介绍如何使用pyth…

centos安装nginx指定版本

centos安装nginx 1.24.0 安装nginx 1.24.0操作步骤 安装nginx 1.24.0 操作步骤 安装依赖 yum -y install gcc gcc-c make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel2.下载Nginx安装包 wget https://nginx.org/download/nginx-1.24.0.tar.gz3.解压&am…

查询文件hash值

查询文件hash值 1 Windows 查询文件hash值1.1 certutil -hashfile 文件名 2 Linux 环境查询文件hash值2.1 sha256sum 文件名2.2 md5sum 文件名 1 Windows 查询文件hash值 在某些环境要对比两个文件是否完全一致 1.1 certutil -hashfile 文件名 certutil -hashfile C:\Users\…

【C++ 自写String】

CString.hpp #include <iostream> #include <string.h>#pragma warning(disable:4996) using namespace std;class CString { private:int len;char* data;public:CString():data(nullptr),len(0) {cout << "0空构造\n";}CString(const char* _da…

计算机服务器中了mallox勒索病毒解密方案计划,勒索病毒解密措施

计算机技术的不断应用与发展&#xff0c;为企业的生产运营提供了有利条件&#xff0c;但网络安全威胁无处不在。近期&#xff0c;广西某生物制药企业的计算机服务器遭到了mallox勒索病毒攻击&#xff0c;导致企业的计算机所有重要数据被加密&#xff0c;严重影响企业的生产运营…

【jetson笔记】torchaudio报错

原因是因为pip安装的包与jetson不兼容导致 自己安装或者cmake编译也会报错 需要拉取官方配置好的docker镜像 拉取docker镜像 具体容器可以看官网&#xff0c;按照自己需求拉取即可 https://catalog.ngc.nvidia.com/orgs/nvidia/containers/l4t-ml 如果其他包不需要只需要torc…

2024区块链应用最趋势,RWA实物资产化

作者 张群&#xff08;赛联区块链教育首席讲师&#xff0c;工信部赛迪特聘资深专家&#xff0c;CSDN认证业界专家&#xff0c;微软认证专家&#xff0c;多家企业区块链产品顾问&#xff09;关注张群&#xff0c;为您提供一站式区块链技术和方案咨询。 实物资产通证化&#xff0…

pyspark学习_dataframe常用操作_01

1. 创建DataFrame 本文使用DataFrame通过读取json文件获取数据&#xff0c;代码如下: from pyspark.sql import SparkSessionspark SparkSeesion.builder.getOrCreate() #创建sparkSession peopleDF spark.read.format("json").load("people.json") &qu…

day01 二分,移除元素

题目链接&#xff1a;leetcode704-二分查找, leetcode27-移除元素 二分 注意事项&#xff1a;开闭区间 如果右闭&#xff0c;则rightlen(nums)-1, for left < right {}, rightmid-1 如果右开&#xff0c;则rightlen(nums),  for left < right {},  rightmid Go 左开…

Conda python运行的包和环境管理 入门

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装 Conda 是一个功能强大的命令行工具&#xff0c;用于在 Windows、macOS 和 Linux 上运行的包和环境管理。 本 conda 入门指南介绍了启动和使用 conda 创建环境和安装包的基础知识。 1. 准备…

解决Android Studio gradle下载超时和缓慢问题(win10)

解决超时问题 一般配置阿里云代理就可以解决。 具体配置方法&#xff0c;参考&#xff1a;https://blog.csdn.net/zhangjin1120/article/details/121739782 解决下载缓慢问题 直接去腾讯云镜像下载&#xff1a; https://mirrors.cloud.tencent.com/gradle/ 下载好了之后&…

三、安全工程—物理安全(CISSP)

目录 1.物理安全概述 2.物理安全计划 2.1 物理安全计划—考虑因素 2.2 物理安全—计划大纲

Spring 的 IOC 和 AOP

题目 Spring 的 IOC 和 AOP 推荐解析 IOC 是什么&#xff1f; IoC&#xff08;Inversion of Control&#xff09; 控制反转&#xff0c;是一种常见的设计思想&#xff0c;主要就是将手动创建对象的控制权&#xff0c;交给 Spring 框架来管理。 为什么需要存在一个容器&…

SpringCloud Alibaba Sentinel 与 SpringCloud Gateway 的限流有什么差别?(三种限流算法原理分析)

目录 一、Sentinel 与 Gateway 的限流有什么差别&#xff1f; 1.1、前置知识 - 四种常见的限流算法 1.1.1、Tips 1.1.2、计数器算法 1&#xff09;固定窗口计数器算法 2&#xff09;滑动窗口计数器算法 1.1.3、令牌桶算法 1.1.4、漏桶算法 1.2、解决问题 一、Sentinel…