给定一个数组nums,编写一个函数将所有0移动到数组的末尾,同时保持非零元素的相对顺序。
要求
1.必须在原数组上操作,不能拷贝额外的数组
2.尽量减少操作次数
3.注意时间空间复杂度
输入:
0 1 0 3 12
输出:
1 3 12 0 0
代码:
#include<stdio.h>
#define N 5
void f(int a[]){
int num0=0; //统计0的个数
for(int i=0;i<N;i++){
if(a[i]==0){
num0++;
// printf("%d\n",i);
}else if(num0!=0){
a[i-num0]=a[i];
a[i]=0;
}
}
printf("\n");
for(int i=0;i<N;i++){
printf("%d ",a[i]);
}
}
int main(){
int a[N]={0,1,0,3,12};
f(a);
return 0;
}