面试题集锦

来源:互联网 发布:18183礼包软件 编辑:程序博客网 时间:2024/06/06 02:19

未分类版:

1、 有a,b,c,d四个人,现在有三个酒杯X,Y,Z三个不规则酒杯, X,Y容量为8两,现在已装满酒,Z容量为3两,为空杯.现在要求四个人每人都能平均喝到4两酒,请说出该怎么喝?写出算法,并打印出每步X,Y,Z杯内的酒多少和四个人每人所喝的酒?


 2 、(微软)
一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。
请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
注意:
- 5个数值允许是乱序的。比如: 8 7 5 0 6
- 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4
- 0可以多次出现。
- 复杂度如果是O(n2)则不得分。

3、(微软)
设计一个算法,找出二叉树上任意两个结点的最近共同父结点。
复杂度如果是O(n2)则不得分。

4、(微软)
一棵排序二叉树,令 f=(最大值+最小值)/2,设计一个算法,找出距离f值最近、大于f值的结点。
复杂度如果是O(n2)则不得分。

5、(微软)
一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。
复杂度最好是O(n),如果是O(n2)则不得分。

 

6、给你一个巨大的电话号码簿,每一个记录由名字和电话号码两部分组成,电话号码簿按照名字的字母顺序排列。现在给你一个电话号码,问你如何设计算法使得在最快的时间内找到电话号码的主人。


7、一个双精度浮点型数组,无序排列,有大概几百亿个元素(several tens of billions of entries,我没理解错吧)。现在让你找出其中最大的一百个元素,要求时间复杂度O(n)。我想到的是遍历一百次,但这肯定不是他想要的答案。


8、设计一个文本框,比如google search的那个框,你往里敲单词,比如computer。你每敲一个字母,蹦出来的单词都会更新。比如,你敲c,会出来chicken, cat, concept, combine,computer, 等等。你接着键入o,就只剩下concept和combine和computer了。再键入m,就剩下combine和computer了......问这个如何实现。


9、C++里面的dynamic_cast如何实现,为什么dynamic_cast要求被cast的指针指向的类至少要有一个virtual method?


10、virtual inheritance 为什么能够避免导出类中有多于一个的 virtual base class的copy?

 

11、对于一个未知的binary tree,给你先序遍历和中序遍历的结果,要你重建这个二叉树,用什么算法?如果其他组合呢?比如先序和后序?中序和后序?

 

12、(百度)求符合指定规则的数。
给定函数d(n) = n + n的各位之和,n为正整数,如 d(78) = 78+7+8=93。 这样这个函数可以看成一个生成器,如93可以看成由78生成。
定义数A:数A找不到一个数B可以由d(B)=A,即A不能由其他数生成。现在要写程序,找出1至10000里的所有符合数A定义的数。
输出:
1
3

....

 

13、(微软)一些飞机从基地起飞,要让其中有一架飞机绕地球飞一圈后回到基地,但一架飞机上满油后只能绕地球半圈,不过飞机之间可以互相传油,飞机不能坠毁,没油的飞机只能返回基地,飞机在基地可以加油,
问:要让一架飞机绕地球飞一圈至少需要多少架飞机?

 

14、有2n+1个数,都是两两成对的,没排过序的,找出其中不成对的一个数,用最优的算法,不能用冒泡法之类的效率低下的算法

 

15、有600个苹果10个盒子,要求把600个苹果分装到10个盒子里。如果有人来买苹果随便说出一个数,直接拿这些盒子组装一下就可以给他不用拆分盒子。请问这10个盒子应该分别装多少苹果?— — — — — — — — — — 另外用下面的程序实现出来(Java)
public void countApple() {
    int[] box = new int[10];
    int count = 600;
    //  这里填充代码;
}

 

原创粉丝点击