CrackingtheCodeInterview之数学与概率

NO.1 有个篮球框,下面两种玩法可任选一种。玩法1:一次出手机会,投篮命中得分。玩法2:三次出手机会,必须投中两次。如果p是某次投篮命中的概率,则p的值为多少时,才会选择玩法1或玩法2?

解法:玩法1成功的几率为p,玩法2成功的几率为p*p+p*(1-p)*p+(1-p)*p*p=3p*p-2*p*p*p,比较两者当p<0.5时,方法1较好,当p>0.5时方法2较好。

NO.2 三角形的三个顶点上各有一只蚂蚁。如果蚂蚁开始沿着三角形的边爬行,两只或三只蚂蚁相撞在一起的概率有多大?假定每只蚂蚁会随机选一个方向,每个方向被选到的几率相等,而且三只蚂蚁的爬行速度相同。类似问题,在n个顶点的多边形上有n只蚂蚁,求出这些蚂蚁发生碰撞的概率。

解法:每个蚂蚁 的方向有两个选择,而不相撞的情况只有两种,全部顺时针或逆时针,即2/2^(n),所以发生碰撞的概率为1-1/2^(n-1).

NO.3 给定直角坐标系上的两条线,确定这两条线会不会相交。

解法:计算线的斜率和y轴截距,首先比较两条线的斜率,若不同就相交,若相同判断截距是否相等,若相等就相交,若不等就是平行的直线不相交。 

NO.4 编写方法,实现整数的乘法、除法和减法运算。只允许使用加号。

解法:乘法和除法可以利用循环来实现,循环相加和循环相减,这里在考虑正负数的时候可以先计算绝对值的乘积和商,然后根据二者的符号判断最终结果。减法运算可以通过翻转的方法计算,如a-b=a+(-b). 

NO.5  在二维平面上,有两个正方形,请找出一条直线,能够将这两个正方形对半分。假定正方形的上下两条边与x轴平行。

解法:通过两个正方形的中心点,求斜率和截距即可。注意斜率为无穷时的标记。

NO.6 在二维平面上,有一些点,请找出经过点数最多的那条线。 

解法:任意两点确定一条直线,使用map记录斜率和截距及重复的个数,最后找出重复数量最多的即可。

NO.7 有些数的素因子只有3、5/7,请设计一个算法,找出其中第k个数。

解法1:蛮力法,每次从已经确定的m个数中找一个与 3、5/7相乘最小的数加入其中,这样做的复杂度为O(k*k)

解法2:使用队列,每次计算新加入的数的3、5/7的倍数加入队列,成为备选,从而从备选中选择最小的,以此类推。

解法3:优化方法,使用3个队列分别保存3、5/7的倍数,然后每次比较3个队列开始的数字,找到最小的并清除,这种方法最优。


你可能感兴趣的:(Interview)