告手帮忙看几道百度电话面试题
3一个概率题:54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少?
4、给一组数,其中只有一个数是重复了奇数次,其余都重复了偶数次,如何找出奇数次的那个数
5,上千万条记录,统计出重复记录最多的前N条。
6、一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum
[解决办法]
3 C(4,1)*C(50,11)/C(52,13)
4 ans=0,for i in 1 to n , ans^=num[i] 最后qns为所求
5 先统计每个记录出现的次数(hash),再求第N大元素(经典法)
6 排序,两边夹 O(nlg(n))
[解决办法]
[解决办法]
[解决办法]
4/17 应该是正确的
怎么说也应该是1/4左右吧,不会那么小
[解决办法]
[解决办法]
应该是4/17,稍小于1/4,fanster28_的答案是对的。
[解决办法]
[解决办法]
[解决办法]
[解决办法]
3.c(4,1)*(1/4)*(12/51) = 4/17
[解决办法]
[解决办法]
根据条件概率:当拿到红桃A(已知)后又拿黑桃A的概率:
p{A|B} = p{AB}/p{B}
由此得p{AnB} = p{A|B} * p{B}
p{AnB}就是B发生,A也发生的概率.也就是我们所求.
我们假设每个人拿a张牌,一共有b张牌:
p{B}:拿一张红桃A的概率是a * 1/b.
p{A|B}:已经拿了一张红桃A了,拿一张黑桃A的概率是 (a-1) * 1 / (b-1).
带入得:p{AB} = (a * (a - 1)) / (b * (b - 1)).
现在我们带入楼主的题目:b = 52,人数为N个人,a=52/N,所以我们可以得出以下结论:
当N=52时,a=1,则拿到红桃A后又拿黑桃A的概率为: 0;
当N=26时,a=2,则拿到红桃A后又拿黑桃A的概率为: (2*1) / (52*51) = 0.00075 = 0.75%.
...
当N=4时,a = 13,拿到红桃A后又拿黑桃A的概率为: (13*12) / (52*51) = 0.059 = 5.9%.
当N=1时,a=52,拿到红桃A后又拿黑桃A的概率为: 1.
解毕.
[解决办法]
第五题:
千万条记录,内存能装下么?
hash 统计次数,hash 函数怎么设计?
统计最多的前N条,莫非用最大堆?
求详解。。。。。。
[解决办法]
四个人分牌:1/4*1/4=1/16吧,跟多少张牌没关系。。。
这是真解!其他错误。。
[解决办法]
[解决办法]
[解决办法]
3一个概率题:54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少?
缺少条件,不知道几个人打牌,没法做,如果只有一个人自己抽2张牌概率是1/52/51
4、给一组数,其中只有一个数是重复了奇数次,其余都重复了偶数次,如何找出奇数次的那个数
异或运算,复杂度O(n)
5,上千万条记录,统计出重复记录最多的前N条。
内存用Hash表
数据Select top 10 A from TB group by A order by(count(A))
6、一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum
Hash表,复杂度O(n)
[解决办法]
5,上千万条记录,统计出重复记录最多的前N条。
内存用Hash表,第一步,求重复,O(N),第二步,求前K大问题,O(N),总体O(N)
[解决办法]
3.按n个人算,应该是(1/n)的2次方
4.所有值做异或处理
5.先group by 并按记录数降序排序,再取前N条
6.两层循环,里层的循环从外层循环开始的值的下一个值开始
[解决办法]
3一个概率题:54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少?
有几个人参与呢。
4、给一组数,其中只有一个数是重复了奇数次,其余都重复了偶数次,如何找出奇数次的那个数
判断是否相同,分组,记录每个数与其相同数。
5,上千万条记录,统计出重复记录最多的前N条。
这个应该是SQL的groud by吧然后按次数取top N
6、一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum
这个道理和打循环赛一样,就是两两对抗,取和。每个都与后面的相加,这样好像很笨,可是想不出更好的了。
[解决办法]
最后一题:
1,排序
2,if(a[0]+a[1]>sum ||a[a.length-1]+a[a.length-2]<sum) return false;
3, for(i=0,j=length-1;;){
tmp = a[i]+a[j];
if(tmp==sum){
return true;
}else if(tmp<sum){
i++;
}else{
j--;
}
}
[解决办法]
实际应用中,用排序和Hash解这个问题,其实差不了多少,排序不用额外空间,而Hash的常数也不小呢。应该都可以算正确答案。
btw:标题只要是大公司的面试题,一般都能被推荐,并且参与讨论的人不少,难道引发大家学习算法的兴趣,只能靠面试题?