思路1:
双指针,进行交换操作
class Solution {
public void moveZeroes(int[] nums) {
int p0 = 0;
int p1 = 0;
while(p1 < nums.length && p0 < nums.length){
swap(nums,p0,p1);
while(p0 < nums.length && nums[p0] != 0){
p0++;
}
p1 = p0;
while(p1 < nums.length && nums[p1] == 0){
p1++;
}
}
}
public void swap(int[] nums,int i,int j){
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}
思路2:别人的
就是遍历一遍数组将所有非零的元素重新覆盖此数组
再补上0
这种方法省去了很多交换操作
class Solution {
public void moveZeroes(int[] nums) {
int index = 0;
for(int i = 0;i < nums.length;i++){
if(nums[i] != 0){
nums[index++] = nums[i];
}
}
while(index < nums.length){
nums[index++] = 0;
}
}
}