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

双指针法移除元素

思路

既然问题要求我们就地删除给定值的所有元素,我们就必须用 O(1) 的额外空间来处理它。如何解决?我们可以保留两个指针 i 和 j,其中 i 是慢指针,j 是快指针。

算法

当 nums[j] 与给定的值相等时,递增 j 以跳过该元素。只要 nums[j]≠val,我们就复制 nums[j] 到 nums[i] 并同时递增两个索引。重复这一过程,直到 j 到达数组的末尾,该数组的新长度为 i。

该解法与 删除排序数组中的重复项https://link.zhihu.com/?target=https%3A//leetcode-cn.com/articles/remove-duplicates-from-sorted-array/的解法十分相似。

Java 代码实现

public int removeElement(int[] nums, int val) {int i = 0;for (int j = 0; j < nums.length; j++) {if (nums[j] != val) {nums[i] = nums[j];i++;}}return i;
}

复杂度分析

  • 时间复杂度:O(n), 假设数组总共有 n 个元素,i 和 j 至少遍历 2n 步。
  • 空间复杂度:O(1)。
http://www.dtcms.com/a/267926.html

相关文章:

  • 基于文心开源大模型ERNIE-4.5-0.3B-Paddle私有化部署并构建一个企业智能客服系统
  • 小菜狗的云计算之旅,今天学习MySQL数据库基础知识及操作
  • OpenGL ES 纹理以及纹理的映射
  • 【一起来学AI大模型】数据处理核心:NumPy/Pandas/Matplotlib 精要指南
  • HarmonyOS开发实战:鸿蒙分布式生态构建与多设备协同发布全流程详解
  • Flink ClickHouse 连接器数据写入源码深度解析
  • Qt实战:使用QSqlDatabase连接MySQL,并实现增删改查
  • JavaFX项目的搭建【授课用】
  • Qt:QWidget常用属性
  • NV205NV209美光固态闪存NV210NV215
  • QT并发机制
  • Qt实现外网双向音视频通话/支持嵌入式板子/实时性好延迟低/可以加水印
  • Linux系统移植(7.4)
  • C#实现CAN通讯接口
  • python-if结构、三目运算符
  • 一个简单的脚本,让pdf开启夜间模式
  • 【IOS】XCode创建firstapp并运行(成为IOS开发者)
  • Maixcam的使用3程序打包
  • 【机器学习笔记Ⅰ】13 正则化代价函数
  • 2025年6月AIGC发展全景:技术轻量化、Agent产业化与伦理新挑战
  • bottles安装网易云出现的问题01中文出现乱码问题
  • 等保测评-Apache Tomcat中间件
  • SpringMVC参数接收与数据返回详解
  • MySQL 8.0 主从复制原理分析与实战
  • 传统微商困境与开源链动2+1模式、AI智能名片及S2B2C商城小程序的转型破局
  • 数据挖掘:从理论到实践的深度探索
  • 基于腾讯云开发与“人·事·财·物”架构理念的家政预约小程序设计与实现
  • 【PyTorch】PyTorch中torch.nn模块的卷积层
  • 10.1《3步用ChatGPT+LangChain打造高质量私有数据集,模型效果提升200%》
  • Java多线程知识小结:Synchronized