Givenanarraynums,writeafunctiontomoveall0'stotheendofitwhilemaintainingtherelativeorderofthenon-zeroelements.Forexample,givennums=[0,1,0,3,12],aftercallingyourfunction,numsshouldbe[1,3,12,0,0].Note:Youmustdothisin-placewithoutmakingacopyofthearray.Minimizethetotalnumberofoperations

题意:给一个数组,把其中的0放到最后。注意不要创建新的数组和最小化所有操作的数量

voidmoveZeroes(int*nums,intnumsSize){//选择排序变一下。。。。。n*2//inti,j;//for(i=0;i<numsSize;i++)//for(j=i+1;j<numsSize;j++){//if(nums[i]==0){//inttemp=nums[i];//nums[i]=nums[j];//nums[j]=temp;//}//}//网上的做法1.简单粗暴容易理解。只不过是分了两步而已。。。inti;intindex=0;for(i=0;i<numsSize;i++){if(nums[i]!=0){nums[index]=nums[i];index++;}}//printf("%d",index);for(i=index;i<numsSize;i++){nums[i]=0;}///还有做法2.不太容易理解,}

PS:维持俩指针。。。。。

一开始想到的事排序。。。。。。把0排到最后,虽然过了,但是复杂度n*2.操作数量也挺多的。

看了网上的做法1.容易理解简单粗暴。

还有一个做法理解起来有点障碍。。。。。。