面试题集(持续更新)

1一个概率题:54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少? 
>>>4/17 = C(4,1)*C(50,11)/C(52,13)

2、给你n个数,其中有且仅有一个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那一个数。 
>>>利用异或运算的一个神奇性质,“数A两次异或同一个数B,结果还是数A,这两次异或运算不一定要是连续的”,从头到尾进行
一次异或,最终的结果就是那个出现了奇数次的数。

3,上千万条记录,统计出重复记录最多的前N条。 
>>> 先散列,统计出每条记录的重复数目,O(n), 然后求前N最大值,O(n)。

4、一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum
>>>Hash表,将N个整数散列到Hash表上,O(n),然后依次遍历去查找(sum-当前整数),看能否找
的到,总体O(n)。

5,    给你n个数,其中有且仅有两个数出现了奇数次,其余的数都出现了偶数次。用线性时间常数空间找出出现了奇数次的那两个数。
>>>首先应用4给出的方法,得到那两个奇数异或后的结果,这个结果肯定是不为0的。然后根据这个结果,比如为011001,利用最后
一个1将这n个数字划分为两组,然后针对这两组分别再应用4中给出的方法。

6、有1000瓶水,其中有一瓶有毒,小白鼠只要尝一点带毒的水24小时后就会死亡,至少要多少只小白鼠才能在24小时时鉴别出那瓶水有毒。

用二进制算法。

把1000瓶水编号,每个编号写成二进制的形式,pow(2,10) = 1024 > 1000,这样每个编号就有10位。

把10只小白鼠编号,从1到10,让第N号小白鼠去喝瓶子编号第N为为1的水,

新定义一个十位二进制数,最终死掉的小白鼠的编号的位全部为1.

比如 1,3,5,7,8号小白鼠死掉了,那有毒的瓶子的二进制编号就是 101010110

posted @ 2011-05-18 01:44  elwin  阅读(991)  评论(0编辑  收藏  举报