news 2026/4/24 20:21:08

双指针1:移动零

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
双指针1:移动零

🔥个人主页:Milestone-里程碑

❄️个人专栏: <<力扣hot100>> <<C++>><<Linux>>

<<Git>><<MySQL>>

🌟心向往之行必能至

题目描述

给定一个数组nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。注意:必须在不复制数组的情况下原地对数组进行操作。

示例

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

方法一:双指针交换法

思路

我们可以用一个指针left来记录当前非零元素应该放置的位置,然后遍历数组。当遇到非零元素时,就将它与left位置的元素交换,并让left指针右移。这样可以保证left指针之前的所有元素都是非零的,且保持了原有顺序。

代码实现

cpp

class Solution { public: void moveZeroes(vector<int>& nums) { int left = 0; for (auto& x : nums) { if (x != 0) { swap(x, nums[left]); left++; } } } };

复杂度分析

  • 时间复杂度:O (n),其中 n 是数组的长度。我们只需要遍历一次数组。
  • 空间复杂度:O (1),只使用了常数级的额外空间。

方法二:覆盖补零法

思路

  1. 先遍历数组,把所有非零元素依次覆盖到数组的前面,用一个变量stack_size记录当前覆盖的位置。
  2. 遍历完成后,stack_size及之后的位置全部补零即可。

代码实现

cpp

class Solution { public: void moveZeroes(vector<int>& nums) { int stack_size = 0; // 第一步:把非零元素移到前面 for (int x : nums) { if (x != 0) { nums[stack_size++] = x; } } // 第二步:后面的位置全部补零 while (stack_size < nums.size()) { nums[stack_size++] = 0; } } };

复杂度分析

  • 时间复杂度:O (n),两次遍历数组,总时间还是线性的。
  • 空间复杂度:O (1),同样是原地操作。

方法对比

方法优点缺点
双指针交换法只需一次遍历,操作次数更少交换操作会多写几次赋值
覆盖补零法逻辑直观,容易理解需要两次遍历,操作次数略多

在进阶要求 “尽量减少操作次数” 时,双指针交换法会更有优势。


总结

这道题的核心是原地修改保持相对顺序,两种方法都能满足要求。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 3:12:14

4个维度掌握Snipe-IT:从0到1构建企业级资产管理体系

4个维度掌握Snipe-IT&#xff1a;从0到1构建企业级资产管理体系 【免费下载链接】snipe-it A free open source IT asset/license management system 项目地址: https://gitcode.com/GitHub_Trending/sn/snipe-it 开源资产管理系统Snipe-IT是企业IT资产全生命周期管理的…

作者头像 李华
网站建设 2026/4/20 2:58:16

DeepSeek-R1-Distill-Qwen-1.5B多场景落地:教育、金融、电商

DeepSeek-R1-Distill-Qwen-1.5B多场景落地&#xff1a;教育、金融、电商 你有没有遇到过这样的情况&#xff1a; 老师要为不同年级学生定制数学题&#xff0c;但手动出题耗时又难保质量&#xff1b; 金融分析师需要快速解读财报中的关键数据&#xff0c;却在密密麻麻的表格里反…

作者头像 李华
网站建设 2026/4/19 16:26:37

颠覆式3步解锁星露谷MOD自由:零代码打造专属游戏体验

颠覆式3步解锁星露谷MOD自由&#xff1a;零代码打造专属游戏体验 【免费下载链接】StardewMods Mods for Stardew Valley using SMAPI. 项目地址: https://gitcode.com/gh_mirrors/st/StardewMods 你是否曾梦想过自定义星露谷的季节景观&#xff0c;给村民添加全新剧情&…

作者头像 李华
网站建设 2026/4/19 21:36:18

解决Axure RP界面本地化难题:5个专业优化方案实测

解决Axure RP界面本地化难题&#xff1a;5个专业优化方案实测 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 在Mac…

作者头像 李华
网站建设 2026/4/23 16:59:39

YOLOv9过拟合应对:早停与数据增强策略应用

YOLOv9过拟合应对&#xff1a;早停与数据增强策略应用 在实际部署YOLOv9模型时&#xff0c;很多用户会遇到一个共性问题&#xff1a;训练初期mAP快速上升&#xff0c;但验证集指标在第12–15个epoch后开始停滞甚至下滑——这正是典型的过拟合信号。尤其当你的数据集规模有限&a…

作者头像 李华
网站建设 2026/4/22 5:34:43

5步打造Android自动抢红包终极方案:免root黑科技解放双手

5步打造Android自动抢红包终极方案&#xff1a;免root黑科技解放双手 【免费下载链接】AutoRobRedPackage DEPRECATED :new_moon_with_face: 实现全自动抢红包并自带关闭窗口功能 项目地址: https://gitcode.com/gh_mirrors/au/AutoRobRedPackage 在移动社交时代&#x…

作者头像 李华