给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例: 输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
解法:双指针法
需要用两个指针,一个不停的向后扫,找到非零位置,然后和前面那个指针交换位置即可。
public void moveZeros(int[] nums){
if(nums == null) return;
int left = 0, right = 0;
while(right < nums.length){
if(nums[right] != 0){
swap(nums, left++, right);
}
right++;
}
}
pubilc void swap(int[] nums, int i, int j){
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}