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

02、双指针删除元素

一、快慢指针


   双指针其实原本就是一起移动的,当遇到了需要删除的元素的时候就发生的变化,此时呢,慢指针就会停下来,完成数据的覆盖,而快指针继续移动

这样做的好处就是可以将原本是O(n^2)的时间复杂度的方法,变为O(n)的时间复杂度。数组删除元素本质上是覆盖原本的元素,并不是真正的删除,而后面覆盖的元素

是不会消失的,只会保留。

源代码:


class Solution {
public:int removeElement(vector<int>& nums, int val) {int slow = 0;for (int fast = 0 ; fast < nums.size() ; fast ++ ){if (nums[fast] != val){nums[slow] = nums[fast];   slow ++;}}return slow;}
};

注意:
(1) 在进行双指针的时候,循环语句中的nums[slow] = nums[fast] 其实就是将数组中的元素更新;

   (2) 看似没有删除元素的操作,其实是在判断的时候如果发现了需要删除的元素,就是暂停slow的移动,也就是暂停了for循环;

   (3) 当不是删除的元素的时候,此时的fast(快指针)已经在slow(慢指针)前面了,然后再更新复制,便完成了删除操作;


二、暴力破解

   使用两成for循环,将元素逐个拆解, 知道全部都弄完;这样的空间复杂度是O(1),但是时间复杂度变成了O(n),所以这样的作法不太优化;

源代码:


class Solution {
public:int removeElement(vector<int>& nums, int val) {int num = nums.size();   // 此处可以不用将 nums.size() - 1; 题目中要求的是返回数组的长度;for (int i = 0 ; i < num ; i++){   // 当然这个地方也可以用 i <= num - 1 来实现,本质都是为了不让数组的下标越界;if (nums[i] == val){for (int j = i + 1 ; j < num; j ++){nums[j - 1] = nums[j];}i --;  // 为啥要减一呢 ?因为i 后面的元素都往前面移动了 num --;  // 找到了要删除的元素就 “删除” ,将元素覆盖掉}}return num;}
};

注意:
(1) 暴力破解的内层循环其实是在找到需要删除的元素的时候,将该元素的后面的所有元素往前面移动所以才是 nums[j -1] = num[j];

http://www.rkmt.cn/news/1396477.html

相关文章:

  • 基于Transformer的头部姿态估计:关系感知学习突破遮挡与极端角度挑战
  • Sora 2正式版发布首周深度逆向:Transformer时序建模新范式、世界模型耦合机制与3个尚未修复的生成漏洞(内测工程师内部备忘录)
  • WarcraftHelper 终极指南:3分钟解决魔兽争霸3卡顿、宽屏、FPS限制等常见问题
  • Agent开发面经
  • Keil MDK工程里printf中文正常,一换编辑器就乱码?手把手教你排查编码‘隐形杀手’
  • 【考试总结】2026年5月23日系统架构设计师考试总结
  • 从卡文到爆文只需17分钟,专业作家私藏的ChatGPT创意生成工作流,限免开放48小时
  • Java程序设计(第3版)第四章——方法的重载
  • KMS_VL_ALL_AIO:告别Windows和Office激活困扰的智能解决方案
  • 信息检索结合制品关系:提升需求追踪精度的IR_CRT方法详解
  • 2026最新廊坊水处理药剂品牌排行:5家头部品牌实力对比 廊坊水处理药剂品牌推荐 - 奔跑123
  • 鸿蒙英语备考页面构建:考试选择与每日进度模块详解
  • 国内水泥围墙模具头部企业排行:品质与服务实测对比 - 奔跑123
  • 技术拆解:GPT-5.5如何实现代码理解与视觉生成的并行引擎
  • C语言入门——C语言常见概念
  • 终极音频解密指南:3步轻松转换QQ音乐加密文件为通用格式
  • Docker与Kubernetes在机器学习中的工程实践:环境确定性与智能调度
  • Docker部署MongoDB生产实践:持久化、安全与性能调优
  • C语言个人学习笔记
  • 序列化和反序列化二叉搜索树(二)
  • 终极指南:5分钟掌握Seraphine英雄联盟智能战绩查询工具
  • 2026 品质高的土工布厂家推荐:恒全土工材料上乘品质 - 17322238651
  • Winograd与余数系统融合:数字滤波器性能优化新路径
  • C#上位机与Unity3D工业数字孪生实时数据同步方案
  • 【算法分析与设计】第10篇:下界理论与NP完全性初步
  • stm32-TIM
  • 2026年5月大庆地区黄金回收白银铂金回收甄选门店推荐TOP1 地址及联系方式 - 五金回收
  • 小学期第十二周
  • MPNet-GRUs情感分析模型:融合Transformer与RNN的序列建模实践
  • 硬件友好型超分辨率:一维学习插值实现低成本图像增强