`
lovnet
  • 浏览: 6705115 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

腾讯的一个面试题

 
阅读更多

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

分享到:
评论
2 楼 xhwahaha 2014-07-01  
import java.util.Arrays;
public class TestArray{
static Integer[] a = {0,1,1,0,0,1,1,0,0,1,1,0,0};
public static void main(String [] args){
move();
System.out.println(Arrays.asList(a));
}
public static void move(){
int t;
boolean bl=false;
for(int i=0;i<a.length;i++){
if(a[i]==1 && i!=a.length-1 && a[i+1]==0){
t=a[i+1];
a[i+1]=a[i];
a[i]=t;
bl=true;
}
}
if(bl){
move();
}
}
}
1 楼 jipengyun2008 2012-06-08  
public class Test1 {
public static void main(String[] args) {
int a[]={1,0,0,1,1,0,1,0,1,0,0,0,1,1,0,1,0};
for (int i = 0; i < a.length-1; i++) {
if(a[i] == 1){
int j = i+1;
for (j = i+1; j < a.length; j++) {
if(a[j] == 0){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
}
}

这样也可以的

相关推荐

Global site tag (gtag.js) - Google Analytics