Move Zeroes
发布时间: 2015年10月5日 19:26 时间限制: 800ms 内存限制: 256M
描述
将数组中的0移动的数据的末尾,而不影响其余非0数字的顺序。
请原地移动,不要复制到新数组中。
低于100ms 的算法,想想还有没有其他的更加通用的算法。
输入
第一行是数据的组数 n, n < 300万 之后每一行都是一个[-10, 10]的整数
输出
输出将0移动到末尾后的数组遍历结果,每行一个元素。
样例输入1 复制
5
0
1
0
3
2
样例输出1
1
3
2
0
0
扫描一遍数组,将非0元素压入栈中,踢掉0,并且用count记录0的个数,最后将count个0压入栈尾,打印一遍栈
#include
#include
#include
#include
#include
#include
using namespace std;
int a[3000000];
int main()
{
int n,count = 0;
list l;
list::iterator t;
scanf("%d",&n);
for(int i =0 ; i < n; i++){
scanf("%d",&a[i]);
}
for(int i = 0; i < n; i++){
if(a[i] == 0){
count++;
continue;
}
else l.push_back(a[i]);
}
while(count--) l.push_back(0);
for(t = l.begin(); t != l.end(); t++){
int temp = *t;
printf("%d\n",temp);
}
return 0;
}