🧩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 · 双指针