给定一个数组 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 r = 0;
int l = 0;
while (r < nums.length) {
if (nums[r] != 0) {
nums[l] = nums[r];
l++;
}
r++;
}
for (int i = l; i < nums.length ; i++) {
nums[i] = 0;
}
System.out.println(Arrays.toString(nums));
}
}