恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

LeetCode热题100——移动零

  • 首页
  • 资讯中心
  • /
  • LeetCode热题100——移动零

相关资讯

2026混合开发工具选型指南:从“App接入小程序“到“AI+超级App“ 2026/8/6 11:15:51
2026小程序制作工具哪家效果好?AI赋能效果如何? 2026/8/6 11:15:51
Unity机械臂仿真:从ArticulationBody到物理调优的完整避坑指南 2026/8/6 11:15:51

最新资讯

echarts-liquidfill终极指南:如何用3步创建惊艳的动态液位图表
VisualCppRedist AIO:Windows软件兼容性修复的一站式解决方案
给你们看一个贼“恶心”的科研工具-猫眼课题宝
## 企业AI办公助手落地技术解析:以WorkBuddy为例的权限、工作流与服务集成路径
数据分析基础:相关性分析原理与应用全解析
MCP 协议实战:让 AI Agent 真正连上你的业务系统

今日推荐

电力系统调度中的源荷不确定性建模与优化实践
VGG-T3技术解析:3D重建速度的革命性突破
深度解析旅游网站建设的意义及其对行业发展的深远影响与核心价值体现

本周热门

ncmdumpGUI:一键解锁网易云音乐ncm文件的终极解决方案
分布式配置中心选型实战:Nacos与Consul在创业场景下的对比
MoneyPrinterPlus实战指南:AI视频批量生成与自动化发布完整解决方案

本月精选

如何用DamaiHelper实现演唱会门票的智能自动化抢购:完整技术解决方案指南
第4篇:59 倍性能差距的索引瓶颈定位——一次教科书级的全表扫描调优
终极歌词批量下载神器:5分钟解决离线音乐库歌词同步难题

LeetCode热题100——移动零

发布时间:2026/8/6 11:20:51
LeetCode热题100——移动零 解法一统计零 erase/remove 解题思路这道题要求把数组中的所有0移到末尾同时保持非零元素原来的相对顺序。第一种方法可以分成三步遍历数组统计一共有多少个0。使用remove()配合erase()删除数组中的所有0。根据统计出的数量在数组末尾补回相同数量的0。例如原数组[0, 1, 0, 3, 12] 零的数量2 删除所有零[1, 3, 12] 末尾补两个零[1, 3, 12, 0, 0] 知识点卡片移动待保留元素remove(nums.begin(), nums.end(), 0)会把所有非零元素向前移动并返回新的“逻辑结尾”。它不会真正缩短vector末尾仍然保留着不再需要的元素因此还要配合erase()。✂️真正删除尾部区间erase(new_end, nums.end())会真正删除从新逻辑结尾到原数组末尾的元素。把两步合在一起就是nums.erase(remove(nums.begin(), nums.end(), 0), nums.end());➕在末尾添加元素nums.push_back(0)会在vector的末尾添加一个0。循环执行count次就能补回之前删除的所有零同时保持数组长度不变。 代码实现class Solution { public: void moveZeroes(vectorint nums) { int count 0; // 统计数组中零的数量 for (int i 0; i nums.size(); i) { if (nums[i] 0) { count; } } // remove 把非零元素向前移动 // erase 真正删除末尾不再需要的区间 nums.erase( remove(nums.begin(), nums.end(), 0), nums.end() ); // 在数组末尾补回相同数量的零 for (int i 0; i count; i) { nums.push_back(0); } } };✅一句话总结先数出零的数量再删除所有零最后把相同数量的零补到数组末尾。解法二双指针 解题思路使用两个位置i从左到右扫描整个数组寻找非零元素。next指向下一个非零元素应该放置的位置。当nums[i] ! 0时就交换nums[i]和nums[next]然后把next向右移动一位。以[0, 1, 0, 3, 12]为例开始 [0, 1, 0, 3, 12] next 0 遇到 1 [1, 0, 0, 3, 12] next 1 遇到 3 [1, 3, 0, 0, 12] next 2 遇到 12 [1, 3, 12, 0, 0] next 3每次发现非零元素就把它放到前面的正确位置。扫描结束后所有非零元素都保持原顺序排列在前面零自然被交换到末尾。 知识点卡片next 指针next表示“下一个非零元素应该放在哪里”。next左边都是已经处理好的非零元素只有成功放入一个非零元素后next才会加 1。swap()swap(nums[i], nums[next])会交换当前位置和目标位置的元素。如果i next相当于元素与自己交换不会影响结果因此代码不需要额外判断两个下标是否相同。 代码实现class Solution { public: void moveZeroes(vectorint nums) { // next 指向下一个非零元素应该放置的位置 int next 0; // i 负责从左到右扫描整个数组 for (int i 0; i nums.size(); i) { if (nums[i] ! 0) { // 把当前非零元素移动到前面的正确位置 swap(nums[i], nums[next]); // 下一个非零元素应该放到再右边一格 next; } } } };✅一句话总结用i寻找非零元素用next标记它应该放置的位置每找到一个非零元素就交换并移动next。 方法对比⭐推荐使用双指针解法一按照“统计、删除、补零”三个步骤完成思路直观也能保持非零元素的相对顺序。解法二只需一次从左到右的扫描通过交换原地完成移动步骤更紧凑也更符合这道题想考察的双指针思想。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号