几道微软面试题

几道微软面试题

July、二零一一年二月十二日
------------------------

最初第一期的微软面试100题已经整理完,前60题的答案也早已公布,
一切的,详情,请参见本BLOG 内其它文章。

现在,正式进入,第二期、微软面试题整理阶段
日后一经遇到一些好的面试题,则补充于此文文末。

本文,永久更新、永久维护。

一、微软的一道算法面试题
平面上N个点,每两个点都确定一条直线,
求出斜率最大的那条直线所通过的两个点(斜率不存在的情况不考虑)。时间效率越高越好。

shyli
先把N个点按x排序。
斜率k最大值为max(斜率(point[i],point[i+1])) 0<=i<n-2。
复杂度Nlog(N)。

litaoye:
恩,以3个点为例,按照x排序后为ABC,假如3点共线,则斜率一样,假如不共线,则可以证明AB或BC中,
一定有一个点的斜率大于AC,一个点的斜率小于AC。


二、四道微软面试算法题
(1)
一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出现。0是例外,可以反复出现。
请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相邻。
注意:
- 5个数值允许是乱序的。比如: 8 7 5 0 6
- 0可以通配任意数值。比如:8 7 5 0 6 中的0可以通配成9或者4
- 0可以多次出现。
- 复杂度如果是O(n2)则不得分。
(2)
设计一个算法,找出二叉树上任意两个结点的最近共同父结点。
复杂度如果是O(n2)则不得分。
(3)
一棵排序二叉树,令 f=(最大值+最小值)/2,设计一个算法,找出距离f值最近、大于f值的结点。
复杂度如果是O(n2)则不得分。
(4)
一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。
复杂度最好是O(n),如果是O(n2)则不得分。


三、几道百度电话面试题
3一个概率题:54张扑克牌,除去两张大小王剩下52张扑克牌。
问红桃A和黑桃A同时被一个人拿到的概率是多少?
4、给一组数,其中只有一个数是重复了奇数次,其余都重复了偶数次,如何找出奇数次的那个数
5,上千万条记录,统计出重复记录最多的前N条。
6、一个N个整数的无序数组,给你一个数sum,求出数组中是否存在两个数,使他们的和为sum。

=============================================
四、有一个 List<int> ary ,里面的数字可以任意多而且任意大。

需求是这样的:
从外边接收一个数字(例如100),我要从数组里去找出哪几个相加之后正好是100(可能是两个数相加,也可能是多个数相加),相加的次数以少为优,如果有匹配的,把那几个数的下标保存起来。

silentcross:
考虑了一下,我这样想的,最少就是两个数字,那么就两个开始计算,不行就三个,依次增加数字个数直到找到

首先排除掉比100大的数字,那些肯定不行

两个数字的情况:
对剩下的数字进行从大到小排序,开始遍历,两个数字和等于100的话那么大的那个肯定大于100/2,遍历所有的大于100/2的数字就行了,对第一个数字P1,求100-P1,如果剩余的数字里存在100-P1,那么就是它了,如果没有继续遍历直到100/2

三个数字的情况:
对剩下的数字进行从大到小排序,开始遍历,三个数字和等于100的话那么大的那个肯定大于100/3,遍历所有的大于100/3的数字就行了,对第一个数字P1,求100-P1,然后调用两个数字的情况,求剩下的数字里边和为100-P1的数字

依次类推....

五、google 公司面试题
有两张纸(A纸,B纸),A纸的长和宽都比B纸大,
其中A纸上印有一道纵线,线宽为7个像素,B纸上要打印上黑白相间的列,列宽也是1个像素。

需要将B纸放置在A纸上,要求B纸上的任意相邻的7列和A纸上的纵线的位置重合。
由于印刷的精度很高,我们直接手工对齐的时候总会有误差,
请问如果让您做这项工作,您可以采取什么办法来使其对的更齐。//题目描述,有待商榷。

你可能感兴趣的:(算法,面试,百度,Google,F#)