LeetCode 283. 移动零:双指针双解法(原地交换 + 覆盖补零)全解析

  1. 移动零

一、题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

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

示例 2:

输入: nums = 0输出: 0

提示:

  • 1 <= nums.length <= 10(4)
  • -2(31) <= numsi <= 2(31) - 1
    进阶:你能尽量减少完成的操作次数吗?

二、思路

双指针:一个快指针(负责找),一个慢指针(负责收)。

核心是使用双指针分区,经过一次遍历,把数组动态的分成两个区域。

  • 左边区域是(0 ~ slow-1),全是非零元素;
  • 右边区域是(slow~fast),全是0或者还没被处理的元素。

快指针 指向当前正在检查的元素,遍历数组,负责寻找非零元素。
慢指针指向下一个非零元素应该存放的位置。慢指针守在"非零区域"的边界,它左边的所有位置都已经填满了非零数,它现在的位置就是留给快指针找到的下一个非零数的。

三、代码

javascript 复制代码
/**
 * @param {number[]} nums
 * @return {void} Do not return anything, modify nums in-place instead.
 */
var moveZeroes = function (nums) {
    //初始化慢指针和快指针的指向
    let slow = 0;
    //快指针:遍历数组寻找非零元素
    for (let fast = 0; fast < nums.length; fast++) {
        //找到非零元素,与慢指针交换位置
        if (nums[fast]!== 0) {
            [nums[slow], nums[fast]] = [nums[fast], nums[slow]];
           //如果fast指针指向的值不等于0,slow才会向前移动。若等于0,slow则会在此处守着,直到fast到下一个非零位置后,两者交换,将0后移。
            slow++;
        }
    }
    return nums;
};

四、复杂度

1. 时间复杂度:O(N)

结论:线性时间复杂度。

其中 N 是数组 nums 的长度。

为什么?

  • 遍历次数: 代码中只有一个 for 循环。快指针 fast 从 0 走到 nums.length - 1,每个元素被访问且仅被访问一次。
  • 操作成本: 循环内部的操作(判断是否为 0、交换数值、指针自增)都是常数级的操作,即 O(1)。
    不管数组里的 0 是多是少,或者全是非 0,快指针都要把整个数组跑一遍,所以时间是非常稳定的 O(N)。

2. 空间复杂度:O(1)

结论:常数空间复杂度(原地算法)。

为什么?

  • 额外空间: 我们只定义了两个变量:slow 和 fast(循环变量)。无论数组 nums 有 10 个元素还是 100 万个元素,我们需要使用的额外变量永远只有这两个整数。
  • 没有新数组: 我们直接修改了传入的 nums 数组(in-place modification),没有创建任何新的数组来暂存数据。
  • 没有递归: 没有使用递归调用,所以不存在递归栈的空间消耗。
相关推荐
Logic1013 小时前
C语言/数据结构位运算题解:异或XOR找出学习计划中的“独特学习时间“——只出现一次的数字
c语言·数据结构·数组·位运算·时间复杂度·算法题·异或性质
小蒋学算法3 小时前
算法-交替删除操作后最后剩下的整数-跟着灵茶山艾府学算法
数据结构·算法
荆棘鸟智能4 小时前
林业遥感长势评估怎么做?从NDVI时序分析到LiDAR蓄积量回归
人工智能·算法·智慧林业
hhb_6184 小时前
AIRAGDebug:一键定位RAG链路异常
人工智能·python·算法
朝朝辞暮i5 小时前
C++ 第 6 课:switch —— 多状态选择
开发语言·c++·算法
苏打豆5 小时前
Pinocchio源码阅读——刚体运动物理量空间变换及求导
c++·线性代数·算法·矩阵·机器人
FluxArt6 小时前
GPT Image 2.5 中文提示词教程:Flux Art 可复用模板
前端·gpt·算法
思麟呀6 小时前
位运算:从一个整数到一个集合
c语言·数据结构·c++·算法
阜阳山君GEO6 小时前
豆包 SEED 新版本 GEO 优化:信源金字塔、打分体系与避坑落地指南
人工智能·算法
晓天衡宇•评测社区6 小时前
晓天衡宇亮相 2026 云栖大会:迈向更可信的高质量评测
人工智能·算法·机器学习