给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入:
nums=[0,1,0,3,12]
输出:
[1,3,12,0,0]
示例 2:
输入:
nums=[0]
输出:
[0]
代码(最优解)
class Solution {
public void moveZeroes(int[] nums) {
int nonZeroIndex = 0; // 指向当前非零元素应该存放的位置
// 第一次遍历:将所有非零元素移到前面
for (int i = 0; i < nums.length; i++) {
if (nums[i] != 0) {
nums[nonZeroIndex++] = nums[i];
}
}
// 第二次遍历:将剩余位置填充为0
for (int i = nonZeroIndex; i < nums.length; i++) {
nums[i] = 0;
}
}
}