283. 移动零
思路
- 使用一个指针
i来记录当前非零元素应该放置的位置。 - 遍历数组,如果当前元素不为零,则将其放到
i的位置,并将i向后移动一位。 - 遍历结束后,从
i开始到数组末尾的所有位置都设置为 0。
复杂度分析
- 时间复杂度:O(n),其中n是数组长度。进行了两次独立遍历
- 空间复杂度:O(1),只使用了常数级别的额外空间
代码
class Solution {
public void moveZeroes(int[] nums) {
int slow = 0; // 慢指针:标记非零元素应放置的位置
// 1. 将非零元素移动到数组前部
for (int fast = 0; fast < nums.length; fast++) {
if (nums[fast] != 0) {
nums[slow] = nums[fast]; // 将非零元素移动到前部
slow++;
}
}
// 2. 将剩余位置填充为0
for (int i = slow; i < nums.length; i++) {
nums[i] = 0;
}
}
}

浙公网安备 33010602011771号