移动零
1.题目描述
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
2.思路
可以使用双指针的方式来解决问题。
遍历数组,让两个指针同时往前走,当遇到当前数为0时一个指针停下,另外一个指针继续往前走,当遇到当前不为0时交换两个位置的值,两个指针继续往前走。
3.代码
class Solution {
public void moveZeroes(int[] nums) {
int t = 0;
int p = 0;
for(int x : nums){
if(x == 0){
p++;
}else{
swap(nums,t,p);
t++;
p++;
}
}
}
public void swap(int[] nums,int x,int y){
int temp = nums[x];
nums[x] = nums[y];
nums[y] = temp;
}
}