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

LeetCode 补拙笔记 日期:2026.06.07 题目:283. 移动零

LeetCode 补拙笔记

0. 前言

  • 日期:2026.06.07
  • 题目:283. 移动零
  • 难度:简单
  • 标签:数组、双指针

1. 题目理解

问题描述
给定一个数组nums,将所有0移动到数组的末尾,同时保持非零元素的相对顺序

  • 必须在原地对数组进行操作,不允许复制数组。

示例

输入:nums = [0,1,0,3,12]
输出:[1,3,12,0,0]

2. 解题思路

核心观察

  • 非零元素的相对顺序必须保持不变,因此可以用双指针实现:
    1. 一个慢指针j指向“下一个非零元素应该存放的位置”;
    2. 一个快指针i遍历数组,遇到非零元素就和j位置的元素交换,然后j++
  • 这种方法能保证非零元素的相对顺序不变,且所有操作在原地完成。

算法步骤

  1. 初始化慢指针j = 0
  2. 遍历数组:
    • nums[i] != 0,则交换nums[i]nums[j]
    • 交换后j++
  3. 遍历结束,所有非零元素已移至数组前部,零元素自然落在末尾。

3. 代码实现

packagelc283;classSolution{publicvoidmoveZeroes(int[]nums){intj=0;for(inti=0;i<nums.length;i++){if(nums[i]!=0){inttemp=nums[i];nums[i]=nums[j];nums[j]=temp;j++;}}}}

4. 代码优化说明

classSolution{static{// 预热代码,优化首次运行性能Solutions=newSolution();int[]t={1};for(inti=0;i<500;++i){s.moveZeroes(t);}}publicvoidmoveZeroes(int[]nums){// zeroIndex 记录当前第一个0的位置intzeroIndex=-1;intlen=nums.length;for(inti=0;i<len;++i){if(nums[i]!=0){// 如果前面存在0,则将当前非零元素移动到第一个0的位置if(zeroIndex>=0){nums[zeroIndex]=nums[i];nums[i]=0;// 更新第一个0的位置,向后寻找下一个0for(intj=zeroIndex+1;j<=i;++j){if(nums[j]==0){zeroIndex=j;break;}}}}else{// 遇到第一个0时记录位置if(zeroIndex==-1){zeroIndex=i;continue;}}}}}

5. 复杂度分析

  • 双指针交换法(基础版)
    • 时间复杂度:O(n)O(n)O(n),每个元素最多被访问一次。
    • 空间复杂度:O(1)O(1)O(1),原地操作,仅使用常数额外空间。
  • 优化版(单指针+查找下一个0)
    • 时间复杂度:最坏情况下为O(n2)O(n^2)O(n2)(全零数组),但实际运行中常数优化明显,性能表现通常优于基础版。
    • 空间复杂度:O(1)O(1)O(1),原地操作。

6. 总结

  • 核心思路:利用双指针在原地完成非零元素的“前移”,同时保持其相对顺序。
  • 优化点:
    1. 避免不必要的交换:仅在当前元素非零且前面存在零时才进行移动;
    2. 提前预热JVM:通过静态代码块减少首次运行的性能开销;
    3. 减少if分支:逻辑更紧凑,提高执行效率。
  • 关键技巧:j指针只在遇到非零元素时移动,保证了非零元素的相对顺序不变。
http://www.zskr.cn/news/1484669.html

相关文章:

  • 2026年最新阜阳市黄金+白银+铂金+K金回收门店及联系方式电话推荐 黄金回收店铺TOP5排行榜 - 盛世金银回收
  • QtChart动态曲线实战:用200ms定时器模拟工业数据采集(附滑动窗口源码)
  • 多维聚合实战:从Pandas到Polars的高维数据建模与分析
  • 2026年最新包头市黄金回收店铺TOP5排行榜 黄金+白银+铂金+K金回收门店指南及联系方式电话推荐 - 大熊猫898989
  • 支持向量回归(SVR)原理与实战:从ε管子到鲁棒预测
  • 避坑指南:SPSS做卡方检验时,期望值设置和结果解读最容易出错的3个地方
  • 2026年全国青少年信息素养大赛初赛成绩与晋级结果查询!附:C++赛项【复赛备赛资料(2026最新模拟题+历年复赛真题)】
  • Visual Blocks for ML:可视化积木式机器学习流水线
  • 2026年最新固原市黄金+白银+铂金+K金回收门店及联系方式电话推荐 黄金回收店铺TOP5排行榜 - 盛世金银回收
  • Word Mover‘s Distance(WMD)原理与工业级加速实践
  • 2026年最新儋州市黄金+白银+铂金+K金回收门店及联系方式电话推荐 黄金回收店铺TOP5排行榜 - 盛世金银回收
  • Sqribble文档自动化系统:模板驱动的结构化出版流水线
  • 保姆级教程:Windows 11下Python 3.10.0安装与环境变量配置(含pip安装及常见问题解决)
  • 2026年最新德阳市黄金+白银+铂金+K金回收门店及联系方式电话推荐 黄金回收店铺TOP5排行榜 - 盛世金银回收
  • Kali Linux 2024版上,5分钟搞定ARL灯塔的Docker部署(保姆级避坑指南)
  • 2026年佛山制造业内训六西格玛众智商学院报名费用资料试听课班期咨询入口官网400冯老师 - 众智商学院官方
  • 5分钟搞定Boot Camp驱动部署:Brigadier智能管理方案全解析
  • GPT-4稀疏激活真相:万亿参数模型的2%如何动态实现
  • 别再让IP地址被冒用了!华为交换机IPSG配置实战(从静态绑定到DHCP Snooping)
  • 多维聚合实战:从SQL到Python的数据操纵术
  • Python数据清洗实战:构建可验证的数据契约与工程化处理
  • 告别理论公式!用Python+NumPy手搓一个TDL信道模型(附完整代码)
  • 告别WebUI:用Postman玩转服务器BMC的12个Redfish高频操作(含Session管理避坑)
  • 2025量子AI实战指南:从云API调用到业务增效的三天落地路径
  • Pluto SDR新手避坑指南:从MATLAB驱动安装到第一个信号收发成功
  • 别再当‘炼丹师’了!用SHAP和LIME给你的机器学习模型做个‘X光’检查
  • 告别手动输入!一招搞定SAP业务伙伴(BP)与供应商主数据的自动同步(附SPRO路径截图)
  • 用贝叶斯+正态分布反推新冠感染时间的实操建模
  • 电商搜索排序选型:DNNs与树模型实战权衡指南
  • 别再乱用SysTick了!STM32CubeMX配置FreeRTOS信号量时,这个时基坑你踩过吗?