去年去腾讯某个部门面试过,当时他们公司4个部门让我去面试,不过我也只去了一个,然后就跑到一家小公司上班了,因为很久没上班了,接近2个多月吧,腾讯又要面试好几天,加上那家小公司已经叫我去报到,所以啊,就放弃了,当然水平也不够啦!不过有个问题我记得很清楚。
题目是:一个数组,只保存0,1的值,用一个FOR循环把0,1分离开,不允许借助另一个临时数组空间。即如果初始化a[10]={1,0,0,1,1,0,1,0,1,0}; 结果要为a[10]={0,0,0,0,0,1,1,1,1,1}.
想过一段时间,都没弄出来。今天受到另外一个程序的启发,突然想起这个问题,然后解决了,不过本人觉得还有更好的方法。希望以后可以想到!简单的测试代码为:
int a[17] = {0,1,1,0,1,0,1,0,0,1,1,0,1,0,1,0,1};
int m=0;
int n=0;
for (int i=0;i<17;i++)
{
if (a[i]==0)
{
m++;
}
else
{
n++;
}
a[i] = 1;
if ((m+n)==17)
{
fill(a,a+m,0); //该标准库函数里面实现有个FOR循环,所以我觉得我这个并没有满足题目的要求,顶多可以糊弄下他!
//想用memset来啊,但是不知道如何把它设置成1,当然设置成0是可以的,比较偷鸡取巧。
//写成memset(a,0,sizeof(int)*m);
//memset(a,1,sizeof(int)*m);
}
}
for (int j=0;j<17;j++)
{
cout << a[j] << endl;
}