给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
解【做的有点呆,额外设置了计数器变量统计0的个数再从后往前赋0】:
class Solution {public void moveZeroes(int[] nums) {int slow = 0;int count = 0;for (int fast = 0; fast <= nums.length - 1; fast++) {if (nums[fast] != 0) {nums[slow++] = nums[fast];}else {count ++;}}for (int i = 1; i <= count; i++) {nums[nums.length - i] = 0;}}
}
另解【直接把双指针的慢指针之后的位置全赋0】:
public void moveZeroes(int[] nums) {int slow = 0;for (int fast = 0; fast < nums.length; fast++) {if (nums[fast] != 0) {nums[slow++] = nums[fast];}}// 后面的元素全变成 0for (int j = slow; j < nums.length; j++) {nums[j] = 0;}}