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

Java双指针法:原地移除数组元素

Java双指针法:原地移除数组元素

  • 代码解析
  • 关键点
  • 示例
  • 特点


代码解析

class Solution {public int removeElement(int[] nums, int val) {int cur = 0; // 初始化一个指针 `cur`,表示新数组的当前写入位置for (int i = 0; i < nums.length; i++) { // 遍历原数组if (nums[i] != val) { // 如果当前元素不等于 `val`nums[cur++] = nums[i]; // 将该元素写入新位置,并移动 `cur` 指针}}return cur; // 返回新数组的长度(即有效元素的个数)}
}

这段代码是一个 Java 方法,名为 removeElement,它的功能是原地移除数组中所有等于给定值 val 的元素,并返回移除后数组的新长度。以下是详细解释:

关键点

  1. 双指针思想

    • i:快指针,遍历原数组的所有元素。
    • cur:慢指针,指向新数组中下一个可以写入的位置。
  2. 操作逻辑

    • 遍历数组时,如果当前元素 nums[i] 不等于 val,就将其复制到 nums[cur],然后 cur 自增。
    • 如果等于 val,则直接跳过,不复制。
  3. 结果

    • 最终 cur 的值就是新数组的长度(因为 cur 记录了所有保留元素的个数)。
    • 原数组的前 cur 个元素是移除 val 后的结果(后面的元素可能未被覆盖,但题目不关心)。

示例

假设输入:

nums = [3, 2, 2, 3], val = 3

执行过程:

  1. i=0nums[0]=3(等于 val,跳过)。
  2. i=1nums[1]=2(不等于 val,复制到 nums[0]cur 变为 1)。
  3. i=2nums[2]=2(不等于 val,复制到 nums[1]cur 变为 2)。
  4. i=3nums[3]=3(等于 val,跳过)。
    最终:
  • 新数组前 cur=2 个元素为 [2, 2]
  • 返回 2

特点

  • 时间复杂度:O(n),只需遍历一次数组。
  • 空间复杂度:O(1),原地修改,没有使用额外空间。

这是经典的“原地删除”问题,通过双指针高效解决。

相关文章:

  • Unreal5 从入门到精通之如何实现 离线语音识别
  • 【BIO、NIO、AIO的区别?】
  • 05 接口自动化-框架封装思想建立之httprunner框架(中)
  • 目标检测DINO-DETR(2023)详细解读
  • 海康工业相机白平衡比选择器对应的值被重置后,如何恢复原成像
  • 【Code】Foundations 2017- Catalogue, List of Tables, List of Figures
  • iOS Runtime与RunLoop的对比和使用
  • Journal of Real-Time Image Processing 投稿过程
  • 区域双碳治理:数据驱动与系统破局之道
  • 2.4.1死锁的概念
  • 计算机网络通信技术与协议(七)———关于ACL的详细解释
  • 迪菲-赫尔曼密钥交换算法深度解析
  • 重构研发效能:项目管理引领软件工厂迈向智能化
  • 第二届帕鲁杯screenshot
  • 【Linux】第二十一章 管理存储堆栈
  • 三视图dxf 生成brep 3d图重建 pythonocc solid
  • 适合初学者的机器学习路线图
  • SpringBootDay1|面试题
  • NC65联查单据问题总结
  • 电子电路:什么是射极电阻?
  • 财政部:4月份中央收入增长1.6%,今年以来首月实现正增长
  • 上影节开幕影片《酱园弄·悬案》,陈可辛执导,章子怡主演
  • 甘肃白银煤矿透水事故最新进展:3名被困矿工已无生命体征
  • 贵州茅台:支持工作餐不上酒的规定,请投资者相信茅台创新和自我调节能力
  • 外交部发言人就第78届世界卫生大会拒绝涉台提案发表谈话
  • 证监会副主席李明:支持符合条件的外资机构申请新业务、设立新产品