🧩Algo 双指针

283. 移动零

难度:🟢 Easy | 标签:双指针、数组 | 状态:⬜ LeetCode 链接

思路

慢指针 slow 指下一个非零应放的位置,快指针 fast 扫数组。 扫到非零就交换到 slow 位置,slow 前进。

类比快慢指针的「原地分区」。

代码

class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int slow = 0;
        for (int fast = 0; fast < (int)nums.size(); ++fast) {
            if (nums[fast] != 0) {
                swap(nums[slow], nums[fast]);
                ++slow;
            }
        }
    }
};

复杂度

  • 时间 O(n),空间 O(1)

易错 / 回顾

  • 必须原地,不能开新数组
  • 用 swap 而不是赋值——保证后段的零分布正确
  • 也可两遍扫:第一遍搬非零、第二遍填零,但慢指针法一遍即可
Related · 双指针