当前位置: 首页 > news >正文

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

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.lryc.cn/news/37224.html

相关文章:

  • JavaScript学习笔记(1.0)
  • FCN网络介绍
  • Idea+maven+spring-cloud项目搭建系列--11 整合dubbo
  • 2023年上半年北京杭州/广州深圳软考中/高级报名入口
  • jupyter notebook配置和使用
  • 【C++】通过stack、queue、deque理解适配器模式
  • JavaScript 高级实例集合
  • Flutter(五)容器类组件
  • 实现满屏品字布局
  • 软件测试-性能测试-基础知识
  • java多线程与线程池-02线程池与锁
  • AB测试——流程介绍(设计实验)
  • C++中的智能指针有哪些?分别解决的问题以及区别?
  • 通达信捉妖改良CCI指标公式,简洁巧妙
  • 「Python 基础」面向对象编程
  • 【K3s】第23篇 一篇文章带你学习k3s私有镜像仓库配置
  • Redis学习【12】之Redis 缓存
  • Bootargs 参数
  • Mybatis框架源码笔记(七)之Mybatis中类型转换模块(TypeHandler)解析
  • 论文阅读《Block-NeRF: Scalable Large Scene Neural View Synthesis》
  • 【Matlab】如何设置多个y轴
  • 圆桌(满足客人空座需求,合理安排客人入座圆桌,准备最少的椅子)
  • 如何入门大数据?
  • 如何在Vite项目中使用Lint保证代码质量
  • Spark高手之路1—Spark简介
  • 社科院与杜兰大学金融管理硕士项目——人生没有太晚的开始,不要过早的放弃
  • Spatial-Temporal Graph ODE Networks for Traffic Flow Forecasting
  • IP协议+以太网协议
  • 可视化组件届的仙女‖蝴蝶结图、玫瑰环图、小提琴图
  • 人的高级认知:位置感