当前位置: 首页 > 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),原地修改,没有使用额外空间。

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

http://www.xdnf.cn/news/557641.html

相关文章:

  • IEEE出版|2025年智能光子学与应用技术国际学术会议(IPAT2025)
  • CRC计算
  • doris数据分片逻辑
  • RFID技术在半导体晶圆卡塞盒中的应用方案
  • C语言学习笔记之结构体
  • Cribl 在的function 的活用 (pipeline中)
  • day018-磁盘管理-案例
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用控件调色板QPalette)
  • Linux X86平台安装ARM64交叉编译器方法
  • 如何在 AOSP 中判断一个源文件属于哪个模块(以 CameraService 为例)
  • 首次中医知识问答模型微调
  • CSS display有几种属性值
  • 深入理解 Python 中的几种方法:实例方法、类方法、静态方法与特殊方法
  • leetcode 162. Find Peak Element
  • python新手学习笔记①
  • Linux探秘:驾驭开源,解锁高效能——基础指令
  • Git命令使用全攻略:从创建分支到合并的完整流程
  • 大模型高效微调技术全面解析:从PEFT原理到实战应用
  • 项目进度延误,如何按时交付?
  • 预训练模型:深度学习的通用特征引擎
  • Greenplum数据库维护篇之常用操作指导
  • TripGenie:畅游济南旅行规划助手:个人工作纪实(十八)
  • Windows逆向工程提升之IMAGE_DOS_HEADER
  • 定时任务延迟任务
  • linux内核编译学习笔记
  • Java异常处理与File类终极指南
  • 【基础知识】SPI协议的种类及异同
  • 数据库 1.0.1
  • DAY28类
  • MYSQL备份恢复知识:第四章:备份锁