万事开头难
方法一,遍历两遍,先将0元素移除,最后的slow指向剩下的位置,再将剩下的位置赋值0.
void moveZeroes(int* nums, int numsSize){
int fast = 0;
int slow = 0;
for(;fast < numsSize;fast++){
if(nums[fast] != 0){
nums[slow++] = nums[fast];
}
}
for(;slow < numsSize;slow++){
nums[slow] = 0;
}
}
方法二,遍历一遍
void moveZeroes(int* nums, int numsSize){
int fast = 0;
int slow = 0;
for(;fast < numsSize;fast++){
if(nums[fast] != 0){
nums[slow] = nums[fast];
if(fast > slow) //避免[1]
nums[fast] = 0;
slow++; //避免[0,1],所以不用nums[slow++]
}
}
}