您的位置:首页 > 职场人生

2012-10月微软面试题

2012-10-23 11:00 10 查看
一面:

1、有两个有序链表(数值有序)。一个链表是递增的,一个链表是递减的。现在将两个链表合并成一个链表,并保证最后的链表是递增的。

2、有一颗二叉树,结点的结构体如下:

strcut node

{

int value;

node * left;//左孩子

node * right;//右孩子

node * other;//同一层右侧的结点。

}node *;

如何用新的结构体表示的结点表示出二叉树的结构。即同一层的结点,如何从左到右链接起来。

如果允许用多余的空间,怎么做?不能用多余的空间又怎么做?(这道也是优酷的面试题)

二面:

1、检索二叉树(有序二叉树,左孩子的值都比根的值小,右孩子的值都比根的值大),找一个x,判断二叉树上是否有该结点。如果有,则删除。(写代码)

三面:

1、(智力题)一个监狱里,有100名犯人,1名监狱长。监狱长有一个房间,房间里有一盏灯。监狱长每天可随机从100名犯人之间抽一个犯人(可重复)去这个房间,犯人可开灯、关灯,也可以什么都不做。犯人之间不能通信。问题:在监狱长选第一个人进房间之前,100个人需要商量一个对策,保证:在监狱长选犯人的过程中,其中一个人进房间后看了一下,跟监狱长说,这100个犯人都至少进来过一次了。(监狱长选犯人的次数是无限的)

2、现在有一个数组,数组中的数都是自然数(0,1,2,3...),现在这个数组是有序的,要找到第一个不存在的数,如,(1234),则第一个不存在的是0.如:(0134),第一个不存在的是2.现在要找到第一个不存在的数,时间复杂度小于O(n).

如果这个数组是无序的,时间复杂度小于等于O(n),该怎么做?




                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: