微软四道经典算法面试题(附思路)

合集下载

微软公司面试题及答案

微软公司面试题及答案
只提捅形状上下都不均匀 问你如何才能准确称出4公升的水?
4.一个岔路口分别通向诚实国和说谎国。来了两个人 已知一个是
诚实国的 另一个是说谎国的。诚实国永远说实话 说谎国永远说
谎话。现在你要去说谎国 但不知道应该走哪条路 需要问这两个
人。请问应该怎么问
5.12个球一个天平 现知道只有一个和其它的重量不同 问怎样称
Bono需花1 分钟过桥 Edge需花2分钟过桥 Adam需花5分钟过桥
Larry需花10分钟过桥 他们要如何在17分钟内过桥呢 (这是
Micrsoft征聘人员时问的问题 你必须 在五分钟内答出来才可能获
给了逻辑学家一个求生的赌注机会。但是 逻辑学家在他哈哈大笑的
同时也在心里暗自窃喜 因为对于逻辑学家来说 不存在什么赌注机
会 自己是可以必然求生的。接着他向留下来的助手说了一句话 按
助手的回答 准确无误地走向了自由之门。 他说的是什么话 3.100
个人组成10*10的方队 横队称为行 纵队称为列。从每一行中挑出
把①⑨与⑩⑾作第二次称量
⒈如相等 说明⑿特别 把①与⑿作第三次称量即可判断是⑿是重
还是轻
⒉如①⑨ ⑩⑾说明要么是⑩⑾中有一个重的 要么⑨是轻的。
把⑩与⑾作第三次称量 如相等说明⑨轻 不等可找出谁是重球。
⒊如①⑨ ⑩⑾说明要么是⑩⑾中有一个轻的 要么⑨是重的。
把⑩与⑾作第三次称量 如相等说明⑨重 不等可找出谁是轻球。
小时
则30°X=60(X-n) 6°
即X=12n/11。
此时时针分针的位置是30°X=(360/11)n°=(32+8/11)n°
秒针的位置是
360(X-n)6°=(4320/11)n°=(392+8/11)n°=360n°+(32+8/11)n°=(32+8/11

软件工程师微软面试题

软件工程师微软面试题

微软面试题—很变态但很经典第一组1.烧一根不均匀的绳,从头烧到尾总共需要1个小时。

现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?2.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。

抓取多少个就可以确定你肯定有两个同一颜色的果冻?3.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?4.一个岔路口分别通向诚实国和说谎国。

来了两个人,已知一个是诚实国的,另一个是说谎国的。

诚实国永远说实话,说谎国永远说谎话。

现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。

请问应该怎么问?5.12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。

13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)6.在9个点上画10条直线,要求每条直线上至少有三个点?7.在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你怎样算出来的?8.怎么样种植4棵树木,使其中任意两棵树的距离相等?1.为什么下水道的盖子是圆的?2.中国有多少辆汽车?3.将汽车钥匙插入车门,向哪个方向旋转就可以打开车锁?4.如果你要去掉中国的34个省(含自治区、直辖市和港澳特区及台湾省)中的任何一个,你会去掉哪一个,为什么?5.多少个加油站才能满足中国的所有汽车?6.想象你站在镜子前,请问,为什么镜子中的影象可以颠倒左右,却不能颠倒上下?7.为什么在任何旅馆里,你打开热水,热水都会瞬间倾泻而出?8.你怎样将Excel的用法解释给你的奶奶听?9.你怎样重新改进和设计一个ATM银行自动取款机?10.如果你不得不重新学习一种新的计算机语言,你打算怎样着手来开始?11.如果你的生涯规划中打算在5年内受到奖励,那获取该项奖励的动机是什么?观众是谁?12.如果微软告诉你,我们打算投资五百万美元来启动你的投资计划,你将开始什么样商业计划?为什么?13.如果你能够将全世界的电脑厂商集合在一个办公室里,然后告诉他们将被强迫做一件事,那件事将是什么?1.你让工人为你工作7天,回报是一根金条,这个金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。

微软的面试题及答案(超变态但很经典)

微软的面试题及答案(超变态但很经典)

第⼀组题答案: 1)三根绳,第⼀根点燃两端,第⼆根点燃⼀端,第三根不点,第⼀根绳烧完(30分钟)后,点燃第⼆根绳的另⼀端,第⼆根绳烧完(45分钟)后,点燃第三根绳⼦两端,第三根绳烧完(1⼩时15分)后,计时完成 2)根据抽屉原理,4个 3)3升装满;3升-〉5升(全注⼊);3升装满;3升-〉5升(剩1升);5升倒掉;3升-〉5升(注⼊1升);3升装满;3升-〉5升;完成(另:可⽤回溯法编程求解) 4)问其中⼀⼈:另外⼀个⼈会说哪⼀条路是通往诚实国的?回答者所指的那条路必然是通往说谎国的。

5)12个球: 第⼀次:4,4 如果平了:那么剩下的球中取3放左边,取3个好球放右边,称:如果左边重,那么取两个球称⼀下,哪个重哪个是次品,平的话第三个重,是次品,轻的话同理,如果平了,那么剩下⼀个次品,还可根据需要称出次品⽐正品轻或者重,如果不平:那么不妨设左边重右边轻,为了便于说明,将左边4颗称为重球,右边4颗称为轻球,剩下4颗称为好球,取重球2颗,轻球2颗放在左侧,右侧放3颗好球和⼀颗轻球,如果左边重,称那两颗重球,重的⼀个次品,平的话右边轻球次品。

如果右边重,称左边两颗轻球,轻的⼀个次品。

如果平,称剩下两颗重球,重的⼀个次品,平的话剩下那颗轻球次品 13个球: 第⼀次:4,4,如果平了。

剩5颗球⽤上⾯的⽅法仍旧能找出次品,只是不能知道次品是重是轻。

如果不平,同上 6) o o o o o o o o o 7) 23次,因为分针要转24圈,时针才能转1圈,⽽分针和时针重合两次之间的间隔显然>1⼩时,它们有23次重合机会,每次重合中秒针有⼀次重合机会,所以是23次 重合时间可以对照⼿表求出,也可列⽅程求出 8) 在地球表⾯种树,做⼀个地球内接的正四⾯体,内接点即为所求 第⼆组⽆标准答案 第三组 1. 分成1,2,4三段,第⼀天给1,第⼆天给2取回1,第3天给1,第4天给4取回1、2,第5天给1,第6天给2取回1,第七天给1 2. 求出⽕车相遇时间,鸟速乘以时间就是鸟飞⾏的距离 3. 四个罐⼦中分别取1,2,3,4颗药丸,称出⽐正常重多少,即可判断出那个罐⼦的药被污染 4. 三个开关分别:关,开,开10分钟,然后进屋,暗且凉的为开关1控制的灯,亮的为开关2控制的灯,暗且热的为开关3控制的灯 5. 因为可以⽤1,2,5,10组合成任何需要的货币值,⽇常习惯为10进制 6. 题意不理解...*_* 7. 012345 0126(9)78 第四组都是很难的题⽬ 第⼀题:97 0 1 2 0 或者 97 0 1 0 2 (提⽰:可⽤逆推法求出) 第⼆题:3架飞机5架次,飞法: ABC 3架同时起飞,1/8处,C给AB加满油,C返航,1/4处,B给A加满油,B返航,A到达1/2处,C从机场往另⼀⽅向起飞,3/4处,C同已经空油箱的A平质S嘤⼟浚 盉从机场起飞,AC到7/8处同B平分剩余油量,刚好3架飞机同时返航。

微软经典面试题

微软经典面试题

微软经典面试题
1、如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?(40秒-3分钟)
2、一个岔路口分别通向诚实国和说谎国。

来了两个人,已知一个是诚实国的,另一个是说谎国的。

诚实国永远说实话,说谎国永远说谎话。

现在你要去说谎国,但不知道应该走哪条路,需要问这两个人。

请问应该怎么问?(20秒-2分钟)
3、烧一根不均匀的绳,从头烧到尾总共需要1个小时。

现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢(1分钟)
4、你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。

抓取多少个就可以确定你肯定有两个同一颜色的果冻?(5秒-1分钟)
5、在9个点上画10条直线,要求每条直线上至少有三个点?(3分钟-20分钟)
6、在一天的24小时之中,时钟的时针、分针和秒针完全重合在一起的时候有几次?都分别是什么时间?你怎样算出来的?(5分钟-15分钟)
7、12个球一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球。

13个呢?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)(5分钟-1小时)。

微软面试智力题及答案

微软面试智力题及答案

微软面试智力题及答案1.烧一根不均匀的绳子,从头烧到尾总共需要1个小时,问如何用烧绳子的方法来确定半小时的时间呢?2.10个海盗抢到了100颗宝石,每一颗都一样大小且价值连城。

他们决定这么分:(1)抽签决定自己的号码(1~10);(2)首先,由1号提出分配方案,然后大家表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔进大海喂鲨鱼;(3)如果1号死后,再由2号提出分配方案,然后剩下的4个人进行表决,当且仅当超过半数的人同意时,按照他的方案进行分配,否则将被扔入大海喂鲨鱼;(4)依此类推……条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。

问题:第一个海盗提出怎样的分配方案才能使自己的收益最大化?3.为什么下水道的盖子是圆的?4.中国有多少辆汽车?5.你让工人为你工作7天,回报是一根金条,这根金条平分成相连的7段,你必须在每天结束的时候给他们一段金条。

如果只允许你两次把金条弄断,你如何给你的工人付费?6.有一辆火车以每小时15公里的速度离开北京直奔广州,同时另一辆火车以每小时20公里的速度从广州开往北京。

如果有一只鸟,以30公里每小时的速度和两辆火车同时启动,从北京出发,碰到另一辆车后就向相反的方向返回去飞,就这样依次在两辆火车之间来回地飞,直到两辆火车相遇。

请问,这只鸟共飞行了多长的距离?7.你有两个罐子以及50个红色弹球和50个蓝色弹球,随机选出一个罐子,随机选出一个弹球放入罐子,怎样给出红色弹球最大的选中机会?在你的计划里,得到红球的几率是多少?8.想像你站在镜子前,请问,为什么镜子中的影像可以左右颠倒,却不能上下颠倒呢?9.如果你有无穷多的水,一个3公升的提捅,一个5公升的提捅,两只提捅形状上下都不均匀,问你如何才能准确称出4公升的水?10.你有一桶果冻,其中有黄色、绿色、红色三种,闭上眼睛抓取同种颜色的两个。

抓取多少次就可以确定你肯定有两个同一颜色的果冻?11.连续整数之和为1000的共有几组?12.从同一地点出发的相同型号的飞机,可是每架飞机装满油只能绕地球飞半周,飞机之间可以加油,加完油的飞机必须回到起点。

十大微软最难面试题

十大微软最难面试题

十大微软最难面试题Microsoft 面试的难题是许多求职者在进入这家科技巨头面试时面临的挑战。

这些难题旨在考察应聘者的技术能力、解决问题的能力和创造性思维。

本文将介绍微软十大最难的面试题,展示这些问题的难度和解决思路。

1. 排序光标移动:在一维数组中,给定一个初始位置和一组操作指令(如L代表向左移动,R代表向右移动),求最终光标停留的位置。

解决思路:使用一个变量来记录当前光标位置,根据指令对其进行移动操作即可。

2. 判断回文字符串:给定一个字符串,判断它是否是回文(正读和倒读相同)。

解决思路:使用双指针法,一个指针从字符串的开头向后移动,另一个指针从字符串的结尾向前移动,比较对应位置的字符是否相同。

3. 统计岛屿数量:给定一个由0和1组成的二维矩阵,其中1代表岛屿,0代表海洋,求岛屿的数量。

解决思路:使用深度优先搜索(DFS)或广度优先搜索(BFS)算法,遍历矩阵的每个元素,当遇到岛屿时,将其周围的岛屿标记为已访问,统计岛屿的数量。

4. 实现LRU缓存:设计一个基于最近最少使用(Least Recently Used)策略的缓存数据结构,使得当缓存已满时,能够移除最久未使用的数据。

解决思路:使用哈希表和双向链表结合的数据结构来实现LRU缓存,哈希表用于快速查找数据,双向链表用于维护数据的使用顺序。

5. 二叉树的最近公共祖先:给定一个二叉树和两个节点,找到它们的最近公共祖先。

解决思路:使用递归的方式,从根节点开始向下遍历二叉树,当遇到节点p 或节点q时,返回该节点;如果左子树返回非空,右子树返回非空,则说明p和q分别在左子树和右子树中,最近公共祖先为当前节点。

6. 链表的倒数第k个节点:给定一个链表,找到倒数第k个节点。

解决思路:使用快慢指针的方式,让快指针先移动k个节点,然后快慢指针一起向后移动,直到快指针到达链表末尾,慢指针指向的即为倒数第k 个节点。

7. 判断二叉树是否平衡:给定一个二叉树,判断它是否是平衡二叉树(左右子树的高度差不超过1)。

微软面试问题及答案

微软面试问题及答案

微软面试问题及答案著名的微软题:一到十楼每层电梯口都放颗大小不一的钻石。

你乘电梯从一到十楼,每层电梯门会开一次,并且你只能拿一次钻石。

请问你如何能拿到最大的一颗?如果你没有做个这个题目的话,也可以用几分钟思考一下,别着急往下看。

1、随便拿一颗,反正在我心里是最大的就好。

其他的管他呢。

(好自我的答复)2、电梯先走到10层,之前一次都不拿,然后从10层出来,记住最大的那颗,走下去,去拿就可以了。

(我不能说这个答复错了,也算一种方法吧,不过......)3、从第一层就开始拿,每到一层就比拟一下,如果比手里的小就过,如果大就用手里的这颗替换掉一直到第十层。

(这个完全忽略了只能拿一次的那个条件)4、就拿第一颗,我认为它是最大的,它就是,不再去看其他的。

节约时间,防止被其他人拿走所有,我一颗都没有。

(用这种思路去炒股多好)5、进什么微软?为什么不从一楼走上去,把所有的都拿走?(能说这是强盗逻辑吗?)6、找9个人一起,就算是10个面试者一起合作,每人看一个楼层,联系比照出一个最大的。

(这个答案很有团队精神)7、前三层一律不拿,心理大致测算平均大小和方差;第四到第六层里面,假设有非常显著大的就拿,如果没有,继续大致测算平均大小和方差;第7到第10层,根据前两组平均大小和方差估算一个可能最大水平,拿近似此水平的钻石。

(这个好赞,好缜密的逻辑和算法)8、叫上九个兄弟一人拿一颗不就完了吗?(兄弟多就是好)9、答案就是第十楼的,因为微软要发布wndows 10了,当然在第十楼。

(这个有想象力)10、说说我的想法,把前九层的钻石碾碎,最后第十层最大。

(这个网友的答案还有其他网友评论:请问要用什么每天携带的物品才能把钻石碾碎呢?)各种答案好多!看完大家所有的评论,我需要静静!其实答案是:前四层不动手,从第5层开始只要发现有大于前四层的钻石就拿。

这就是著名的【37%法那么】拒人问题数学模型。

这题没有百分百拿到最大钻石的方法,主要考察面试者的思维逻辑。

微软面试题总结版

微软面试题总结版
2.信件如下:
"xxx领导:您好!我馆近期将展出一批珍贵文物,让更多的人能够真正的体会到中华民族文明的悠久、灿烂。我们希望能将您所拥有的明代的城砖展出。并且我们将在博物馆内设置专栏,宣传您对中华民族悠久文化的保存所作出的巨大贡献,让更多的华夏子孙看到,并且亲身体验到华夏文明的悠久历史,从而加强中华民族的凝聚力!"
五.主观题(说明:在以后的工作过程中,我们可定会犯这样那样的错误。既然错误已经酿成,损失在所难免,我们只能想办法把损失减少到最小。如果能巧妙地回答出这些问题,再发生错误的情况下。能让客户有最少的抱怨,公司有最少的损失。)
1.某手机厂家由于设计失误,有可能造成电池寿命比原来设计的寿命短一半(不是冲放电时间),解决方案就是免费更换电池或给50元购买该厂家新手机的折换券。请给所有已购买的用户写信告诉解决方案。
条件:每个海盗都是很聪明的人,都能很理智地做出判断,从而做出选择。
问题:第一个海盗提出怎样的分配方案才能使自己的收益最大?
2 . 一道关于飞机加油的问题,已知:
每个飞机只有一个油箱, 飞机之间可以相互加油(注意是相互,没有加油机) 一箱油可供一架飞机绕地球飞半圈,
问题:
为使至少一架飞机绕地球一圈回到起飞时的飞机场,至少需要出动几架飞机?(所有飞机从同一机场起飞,而且必须安全返回机场,不允许中途降落,中间没有飞机场)
说明:
1、飞机1、飞机2等飞机n为飞机的个数
2、把整个圆(飞行轨道)周等分为8份,分别定为O点(起飞点),依次为A、B、C、D、E、F、G
设想一下,按题目要求一架飞机要想不加油安全的飞并且安全返回,能飞行最远距离是一个圆周的1/4,既飞行度距离是OB;如果给另外一架飞机加油的话它只能飞行1/8的距离OA。这些前提的存在,再根据题意就可推出如下的飞行放案:
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

微软四道经典算法面试题(附思路)
1.比较经典的四个算法题,目前只收集到相关的思路和个别题目的解法,不断更新中
2. 1.一个整数数列,元素取值可能是0~65535中的任意一个数,相同数值不会重复出
现。

0是例外,可以反复出现。

3.请设计一个算法,当你从该数列中随意选取5个数值,判断这5个数值是否连续相
邻。

4.注意:
5.- 5个数值允许是乱序的。

比如: 8 7 5 0 6
6.- 0可以通配任意数值。

比如:8 7 5 0 6 中的0可以通配成9或者4
7.- 0可以多次出现。

8.- 复杂度如果是O(n2)则不得分。

9. 2.设计一个算法,找出二叉树上任意两个结点的最近共同父结点。

10.复杂度如果是O(n2)则不得分。

11.3.一棵排序二叉树,令 f=(最大值最小值)/2,设计一个算法,找出距离f值最近、
大于f值的结点。

12.复杂度如果是O(n2)则不得分。

13.4.一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,
相同数值不会重复出现。

设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N 1。

14.复杂度最好是O(n),如果是O(n2)则不得分。

15.思路分析
16.1.非0最大-非0最小 1 <=5 ==> 非0最大-非0最小 <=4
17.2.如果每个节点包含父亲指针,把两个节点到根的路径都记录下来,两条路径的最
后面的元素肯定相同,
18.从两条路径的最后一个元素向前比较,直到第一次出现分叉为止,就可以找到最近
节点。

复杂度为O(n),
19.路径最长可能是n
20.如果不包含父亲节点,那就先前序遍历二叉树,遍历的时候可以像哈夫曼树那样左
右01编号,
21.记录给定两节点的到达路径,最后比较两个0,1序列的前面位数,直到出现不相等
为止,就找到最近父节点,
22.复杂度也是O(n)
23.3.找出最大值,最小值,复杂度都是O(h),然后搜索f,可以找到f应该插入的
位置,复杂度也是O(h),
24.再找f的后继,复杂度也是O(h),h最大可能是n,所以总体最坏情况复杂度就
是O(n)
25.4.先排序,复杂度O(nlgn),然后用两个指示器(front和back)分别指向第一
个和最后一个元素,如果
26.A[front] A[back]>N 1,则back–;
27.如果A[front] A[back]=N 1,则计数器加1,back–,同时front ;
28.如果A[front] A[back] 重复上述步骤,O(n)时间找到所有数对,总体复杂度
为O(nlgn)
29.题目分析
30.第1题:首先扫描一遍求出非0平均值,然后再扫描一遍即可判断,复杂度:O(n)
31.第2题,是一个送分题,可以设计一个相当巧妙的数据结构,其复杂度为O(n)
32.第3题,也是送分题,扫描几次即可
33.第4题,送分题。

牺牲空间即可完成。

34.具体算法
35.1.思路是非0最大值-非0最小值 <=数组长度-1
36.我觉得这道题的前提非常重要
37.p ublic boolean isContiguous(int[] array)
38. {
39. int min=-1;
40. int max=-1;
41. for(int i=0;i <array.length;i )
42. {
43. if(array!=0)
44. {
45. if(min==-1||min>array)
46. {
47. min=array;
48. }
49. if(max==-1||max <array)
50. {
51. max=array;
52. }
53. }
54. }
55. return max-min <=array.length-1;
56. }
57.4.关键点在于创建一个Hash表,典型的以空间换时间:-)
58. public static int getSumCount(int[] array,int N)
59. {
60. int count=0;
61. //创建哈希表
62. int[] hashTable=new int[N 1];
63. for(int i=0;i <array.length;i )
64. {
65. hashTable[array]=array;
66. }
67. for(int i=0;i <array.length;i )
68. {
69. //如果是数对中较小的整数(防止重复计数)
70. //并且配对的整数存在
71. //并且不等于与之配对的整数,因数列不存在重复整数
72. if(array <=(N 1)/2&&hashTable[N 1-array]!=0&&arra
y*2!=N 1)
73. {
74. count ;
75. }
76. }
77. return count;
78. }。

相关文档
最新文档