腾讯的一个面试题

    去年去腾讯某个部门面试过,当时他们公司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;
 }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值