一:
一趟遍历
// 双指针
public void moveZeros(int[] nums){
int l = 0, r = 0;
int len = nums.length;
while(r < len){
if(nums[l] == 0){
while(r < len - 1 && nums[r] == 0) r++;
int temp = nums[r];
nums[r++] = nums[l];
nums[l++] = temp;
} else {
l++;
if(r < len) r++;
}
}
}
二:
简单易理解
两趟遍历
puvlic void moveZeros(int[] nums){
int l = 0, r = 0;
int len = nums.length;
while(r < len){
if(nums[i] != 0){
nums[l++] = nums[i++];
} else {
r++;
}
}
for(int i = l; i < r; i++){
nums[i] = 0;
}
}