当前位置:网站首页>阿里腾讯面试一二
阿里腾讯面试一二
2022-08-01 09:35:00 【51CTO】
关于腾讯群面:
非技术岗的第一面是群面,无领导小组,6个人一组。一开始签到后就分好组了,一般都是不同学校的,有中大、华工这些名校也有我们普通本科,在候场时候就和组员聊一聊,结合自己性格特点做好分工,具体分工大概有3个角色,leader,时间控制者和总结者。一般带表的同学做Timer有优势点。进入会议室开始面试后,留给大家发题目。
2分钟看题目后,开始是30秒介绍!!!30秒介绍!!!30秒介绍!!!(重要三)介绍很短,你们要在提前准备好,切记不要多介绍多个辉煌事迹,只要讲一个与岗位相关的重点就好了(只是介绍自己最牛逼的事和特点)。然后开始讨论话题,我的话题是设计一个微信支付的应用场景,要求短时间内提高用户使用数量。但是我们组做的不好,3大原因:1.没有明显的Leader,只有一个华工的研究生学姐在领导大家讨论,但是逻辑不清楚,讨论得很混乱;2.Timer没做好,我本来就想做时间控制者但是我没做好分配时间,大家最后8分钟才确定应用场景,只有5分钟讨论问题和解决方案,不够全面。我的建议是大家提前去了解下微信QQ等社交产品,思考一些应用场景,这样讨论时候心理有低。一般如果你提出这个场景很好,无形中就可以成为Leader或者总结者,所以生活中多思考!3.讨论过程中没有强势的组员。我们组员讨论过程中有矛盾,但是大家都搁置矛盾,没有人坚持自己的想法,有不同意见就换了想法,大家都很友好。这一点面试官和我特别说了,这种情况很不好,必须有一些同学把自己的想法支持到最后。最后的结果是我们组只有总结的那个女生(同时也是她提出了大家认可的应用场景)进入了下一轮。












阿里巴巴算法、数据工程师笔试题选解
1、有三个结点的,可以构成多少个种叉树?
2、一副牌52张(去掉大小王),从中抽取两张牌,一红一黑的概率是多少?
编程题:
3、设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。情特别注意优化时间复杂度的常数。
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 ]|)
请设计一个求最小三元组距离的最优算法,并分析时间复杂度。
5、在黑板上写下50个数字:1至50.在接下来的49轮操作中,每次做如下动作:选取两个黑板上的数字a和b,擦去,在黑板上写|b – a|。请问最后一次动作之后剩下数字可能是什么?为什么?

题解:(题解非官方,仅供参考,有错误的地方望指正!谢谢)
1、有三个结点的,可以构成多少个种树形结构?
解:应该是5种;

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 次
如图会更加清晰:

代码实现:



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 ]|)
请设计一个求最小三元组距离的最优算法,并分析时间复杂度。
解:这道题目有两个关键点:
第一个关键点: max{|x1-x2|,|y1-y2|} =(|x1+y1-x2-y2|+|x1-y1-(x2-y2)|)/2 –公式(1)
我们假设x1=a[ i ],x2=b[ j ],x3=c[ k ],则
Distance = max(|x1 – x2|, |x1 – x3|, |x2 – x3|) = max( max(|x1 – x2|, |x1 – x3|) , |x2 – x3|) –公式(2)
根据公式(1),max(|x1 – x2|, |x1 – x3|) = 1/2 ( |2x1 – x2– x3| + |x2 – x3|),带入公式(2),得到
Distance = max( 1/2 ( |2x1 – x2– x3| + |x2 – x3|) , |x2 – x3| )
=1/2 * max( |2x1 – x2– x3| , |x2 – x3| ) + 1/2*|x2 – x3| //把相同部分1/2*|x2 – x3|分离出来
=1/2 * max( |2x1 – (x2 + x3)| , |x2 – x3| ) + 1/2*|x2 – x3| //把(x2 + x3)看成一个整体,使用公式(1)
=1/2 * 1/2 *((|2x1 – 2x2| + |2x1 – 2x3|) + 1/2*|x2 – x3|
=1/2 *|x1 – x2| + 1/2 * |x1 – x3| + 1/2*|x2 – x3|
=1/2 *(|x1 – x2| + |x1 – x3| + |x2 – x3|) //求出来了等价公式,完毕!
第二个关键点:如何找到(|x1 – x2| + |x1 – x3| + |x2 – x3|) 的最小值,x1,x2,x3,分别是三个数组中的任意一个数,这一题,我只是做到了上面的推导,后面的算法设计是由csdn上的两个朋友想出来的方法,他们的CSDN的ID分别为 “云梦泽” 和 “shuyechengying ”.
算法思想是:
用三个指针分别指向a,b,c中最小的数,计算一次他们最大距离的Distance ,然后在移动三个数中较小的数组指针,再计算一次,每次移动一个,直到其中一个数组结束为止,最慢(l+ m + n)次,复杂度为O(l+ m + n)
代码如下:


边栏推荐
猜你喜欢
随机推荐
Introduction and application of heap memory (including examples)
获取页面数据的方法
How does UXDB return the number of records for all tables in the current database?
various network protocols
Pod environment variables and initContainer
Visualization - Superset installation and deployment
在GBase 8c数据库后台,使用什么样的命令来对gtm、dn节点进行主备切换的操作
rpm和yum
Intensive reading of ACmix papers, and analysis of its model structure
Prime Ring Problem(素数环问题)
Meeting OA (Upcoming Meetings & All Meetings)
常见的API安全缺陷有哪些?
程序员如何学习开源项目,这篇文章告诉你
STM32个人笔记-嵌入式C语言优化
SQL Server database schema and objects related knowledge notes
Redis middleware (from building to refuse pit)
杰理AD14N/AD15N---串口中断问题
Taobao commodity details and details on taobao, senior upgrade version of the API
Static Pod, Pod Creation Process, Container Resource Limits
Naive Bayes--Study Notes--Basic Principles and Code Implementation









