- 思路
我的思路是:遍历数组,若元素不是0,则按顺序放入数组,最后剩余的空位置补0
官方题解给出的最优解也挺精妙,但是貌似不是最优解,只有80% 25%:用快慢指针,将慢指针留在0上,与后面一个元素即快指针做交换
//方法一
void moveZeroes(int* nums, int numsSize){
int k=0;
for(int i=0; i<numsSize; i++){
if(nums[i] != 0){
nums[k++] = nums[i];
}
}
for(; k<numsSize; k++){
nums[k] = 0;
}
}
//方法二
void swap(int *a, int *b){
int temp = *a;
*a = *b;
*b = temp;
}
void moveZeroes(int* nums, int numsSize){
int k=0;
for(int i=0; i<numsSize; i++){
if(nums[i] != 0){
swap(nums+k++,nums+i);
}
}
}