最近老是听到小伙伴们说一些找工作的时候笔试遇到的问题,这篇文章就是找一些阿里巴巴近几年的笔试题及解答方法,因为个人觉得阿里的题目应该代表目前大数据领域的行业水平,别的公司考的只会偏易而不会更难,当然这是在同等职位的情况下,希望对大家有所帮助。
1、有三个结点结点的,可以构成多少个种树形结构?
五种结构
2、一副牌52张(去掉大小王),从中抽取两张牌,一红一黑的概率是多少?
解法一: 52张牌从中抽两张,就是 C(2,52)种情况,一红一黑是C(1,26) * C(1,26)种
P = [C(1,26) * C(1,26) ] / C(2,52) = 26 * 26 / (26 * 51) = 26/51
解法二: 全为黑或者全为红是C(2,26)种情况,由于是黑和红两种,所以要乘以2
P = 1 – C(2,26) / C(2,52) – C(2,26) / C(2,52) = 1 – 2 * (26 * 25)/(51 * 52) = 1 – 25/51 = 26/51
3、设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。情特别注意优化时间复杂度的常数
把数组两两一对分组,如果数组元素个数为奇数,就最后单独分一个,然后分别对每一组的两个数比较,把小的放在左边,大的放在右边,这样遍历下来,总共比较的次数是N/2次;在前面分组的基础上,那么可以得到结论,最小值一定在每一组的左边部分找,最大值一定在数组的右边部分找,最大值和最小值的查找分别需要比较N/2次和N/2次;这样就可以找到最大值和最小值了,比较的次数为N/2 * 3= (3N)/2 次
实现代码如下:#include#include#defineN 7
4、已知三个升序整数数组a[l], b[m]和c[n]。请在三个数组中各找一个元素,是的组成的三元组距离最小。三元组的距离定义是:假设a[i]、b[j]和c[k]是一个三元组,那么距离为:Distance = max(|a[ I ] – b[ j ]|, |a[ I ] – c[ k ]|, |b[ j ] – c[ k ]|)请设计一个求最小三元组距离的最优算法,并分析时间复杂度。
感觉和排序数组中和为给定值的两个数字有点像,再继续顺着思路往下走,要是两个已排序(从小到大)的数组,a[n],b[m],如何求解两数组中差值(非负)最小的两个点,当然暴力求解肯定是可以的,有没有其他更好的算法呢?想想这个和排序数组中给定值的两个数字有没有什么关系?或者能不能从那个方法获取思路,对,方法大致是一样的,就是先分别取两个数组a[n],b[m]中最小的数a[i],b[j],计算两个数的差值,并记录下来currentMin,然后取min(a[i],b[j]),所在的数组,
intminDifference(int*arrayOne,size_tcntOne,int*arrayTwo,size_tcntTwo)
5、有N-1个群众和1个明星,所有的群众都认识该明星,但明星不认识任何一个群众,群众之间是否认识未知。假如你是一个机器人,具有询问一个人是否认识另外一个人的功能,请设计一个最佳算法,在这N个人中最快地找到该明星
其实解法很简单,假设有1,2,3,4,5个人 ,从1开始,问1是否认识2 ,如果认识,留下2,淘汰1 ,如果不认识,留下1,淘汰2 ,之后留下的继续询问3……. 最终剩下的那个就是所谓的明星。
这种解法利用的是减小数据规模的思路,不断将问题的解集合缩小,最终得到解。和从n个数中找到出现次数大于n/2的那个问题很类似。代码如下
6、已知如下代码,并在两个线程中同时执行f1和f2,待两个函数都返回后,a的所有可能值是哪些?、
(1)b=a*2,c=a+11,a=c,a=b a=4
(2)b=a*2,c=a+11,a=b,a=c a=13
(3)b=a*2,a=b,c=a+11,a=c a=15
(4)c=a+11,a=c,b=a*2,a=b a=26
以上是阿里巴巴大数据工程师部分笔试题中的解答题,还有很多题目没有写出来。需要的小伙伴可以给我留言或加文中图片里面的学习君羊。