这个题目讲的就是给一个数组,讲数组的的0移动到数组后面去,其他的数相对位置不变:
如:int array[5]={1,0,0,3,5};
结果:
int array = {1,3,5,0,0};
俩种方法
void swap(int *a, int *b) {
int t = *a;
*a = *b, *b = t;
}
void moveZeroes(int* nums, int numsSize){
// int i = 0;
// int k = 0;
// while(i<numsSize)
// {
// if(nums[i] == 0)
// {
// for(k=i;k<numsSize-1;k++)
// {
// nums[k]=nums[k+1];
// }
// nums[numsSize - 1] = 0;
// numsSize -= 1;
// }
// else
// {
// i++;
// }
// }
int left = 0, right = 0;
while (right < numsSize) {
if (nums[right]) {
swap(nums + left, nums + right);
left++;
}
right++;
}
}
注释掉的是第一种方法:
目的很明确,
碰到0以后,就把0后面的所有数据往前挪一次,简单粗暴,有一个细节就是numsize每次都会减1,会省一点时间;
第二种方法:
俩个指针,只要不为0左指针就一直加,右指针则一直跟着加;
那么碰到0以后呢,左右指针就不会同步了,这个时候就开始交换;
这样的话其实能够保证左指针的左边一直为不为0的数据,而且不为0的数据相对未知也不会变化,这样我们的目的就达到了;