移除元素问题解决方法------LeetCode-OJ题

news/2024/11/8 2:51:16/

scdn!!!
问题:

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

要求:

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

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

OJ代码:

int removeElement(int* nums, int numsSize, int val){int src=0;
int des=0;
while(src<numsSize)
{if(nums[src]!=val){nums[des++]=nums[src++];}else{++src;}
}
return des;
}

解析:

src,des,是数组的两个下标。通过这两个下标的移动来给数组赋值。

src与des一开始都是指向数组的第一个元素的

假设输入的val是 2

while(src<numsSize) 成立,进入循环

nums[src] ! = val 所以if 条件成立。执行语句 nums[des++] = nums[src++];

也就是把nums[src] 的值赋值给 nums[des];

再进行加一操作。

它会判断现在的src 是否满足循环的条件,如果小于numsSize 则继续进行,

如果不满足条件,就会退出循环。

由于nums[src]不等于val ,所以两个下标都进行加一操作

现在,nums[src] = = val; 进行else 语句

++src; 就是 src 下标进行加一操作,不进行赋值操作。

因为我们的目的就是移除 val 元素,保持des下标不变,最后要返回数组。

src 加一操作后的状态
src加一后 nums[src] 就又不等于 val 了,所以继续执行if 语句。

nums[src] 的值赋值给 nums[des];

所以现在 nums[src]的值就是 3

两个下标再进行加一操作。

它会判断现在的src 是否满足循环的条件,如果小于numsSize 则继续进行,

如果不满足条件,就会退出循环。

进行加一操作后的状态
现在 nums[src] 又等于 val; 所以进行else 语句。

src 下标进行加一操作,不进行赋值操作。

src加一
加一之后,nums[src] 又还等于 val; 所以还是进行else 语句。

src加一
此时, nums[src] 就不等于 val 了,所以执行if 语句。

nums[src] 的值赋值给 nums[des];

所以nums[des] 的值就是 4 了。

两个下标再进行加一操作。

进行·加一后操作的状态
nums[src] 又不等于 val 了,所以继续执行if 语句。

nums[src] 的值赋值给 nums[des];

所以现在 nums[src]的值就是 3

此时两个下标再进行加一操作

但是,scr的值会超过numsSize,所以会跳出循环。

然后 return des; 所以现在的数组就是移除val 值后的数组了。


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

相关文章

关于长连接服务器和客户端之间要加入心跳的一些讨论

在之前的章节里深入浅出TCPIP之深入浅出TCPIP之TCP重传机制 我们都知道了TCPIP协议栈有个默认的TCP心跳机制,这个心跳机制是和socket绑定的,可以对指定的套接字开启协议栈的心跳检测机制。默认情况下,协议栈的心跳机制对socket套接字是关闭的,如果要使用需要人为开启的。 比…

腾讯混元AI大模型训练技术揭秘——太极AngelPTM

编者按&#xff1a;秉承“技术提效”理念&#xff0c;腾讯广告不断探索技术能力边界&#xff0c;全面升级广告系统&#xff0c;基于“一大平台、两大模型”持续精进创新研发&#xff0c;提升投放效率与投放效果&#xff0c;助力广告主实现高效的全域经营与生意增长。本篇文章是…

cushy-serial 一个轻量级Python serial库

本文自笔者博客: https://www.blog.zeeland.cn/archives/rgoihgxcoci3 简介 cushy-serial是一个轻量级的Serial框架&#xff0c;初衷是希望使Serial编程变得更加简单、快捷&#xff0c;因此&#xff0c;相较于传统的pyserial&#xff0c;该框架可以更加快速地构建起一个serial…

[Java Web]Request对象 | 超1w字带你熟悉Servlet中的request请求

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;输出优质文章 ⭐所属专栏&#xff1a;Java Web ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注&#x1f609;有写的不好的地方也欢迎指正&#xff0c;一同进步&#x1f601; 目录 Reque…

高速PCB设计指南系列(三)

第一篇 高密度(HD)电路的设计 本文介绍&#xff0c;许多人把芯片规模的&#xff22;&#xff27;&#xff21;封装看作是由便携式电子产品所需的空间限制的一个可行的解决方案&#xff0c;它同时满足这些产品更高功能与性能的要求。为便携式产品的高密度电路设计应该为装配工艺…

单线程的 javascript 如何管理任务

要怎么理解 JavaScript 是单线程这个概念呢&#xff1f;大概需要从浏览器来说起。 JavaScript 最初被设计为浏览器脚本语言&#xff0c;主要用途包括对页面的操作、与浏览器的交互、与用户的交互、页面逻辑处理等。如果将 JavaScript 设计为多线程&#xff0c;那当多个线程同时…

干货 | 电容在电路35个基本常识

第1个电压源正负端接了一个电容&#xff0c;与电路并联&#xff0c;用于整流电路时&#xff0c;具有很好的滤波作用&#xff0c;当电压交变时&#xff0c;由于电容的充电作用&#xff0c;两端的电压不能突变&#xff0c;就保证了电压的平稳。当用于电池电源时&#xff0c;具有交…

IP协议+以太网协议

在计算机网络体系结构的五层协议中&#xff0c;第三层就是负责建立网络连接&#xff0c;同时为上层提供服务的一层&#xff0c;网络层协议主要负责两件事&#xff1a;即地址管理和路由选择&#xff0c;下面就网络层的重点协议做简单介绍~~ IP协议 网际协议IP是TCP/IP体系中两…