微软笔试

高性能架构探索 2010-09-27 02:51:17
昨晚 微软在学校 有场笔试,因为没在学校,所以没参加,下面是听同学说的,下面是大概的一道算法题目。

其实,也可以说是海笔吧

里面有个算法题目,要求时间复杂度小于N

有一个循环有序数组,比如345612,在这个数组里面查找某个数,要求其复杂度小于N

还有个选择题

合并两个均有序的链表,得到一个大的有序的链表,问什么样的情况下,时间复杂度最差,最差为多少
...全文
287 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cswuyg 2010-09-27
  • 打赏
  • 举报
回复
第二题。我想最坏情况应该是:每一次总链增加一个元素(除了最后一个元素),都要比较链1和链2中的元素值。这样的话,好像不是很难。
szszszcw 2010-09-27
  • 打赏
  • 举报
回复
微软在中国的总部设在哪里呀???
ayw215 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yshuise 的回复:]

第二题:算法导论上的归并排序自己看下,我也记不起了。
[/Quote]
不用归并
题目里的链表已经有序了
ccz1130 2010-09-27
  • 打赏
  • 举报
回复
int a[lenth],所需查找的数为x

先比较x与a[0]的大小,若x>a[0],则继续往后顺序查找;若x<a[0],则从a[lenth-1]向前查找。
yshuise 2010-09-27
  • 打赏
  • 举报
回复
第二题:算法导论上的归并排序自己看下,我也记不起了。
harderman 2010-09-27
  • 打赏
  • 举报
回复
期待高人给讲解下第二题
xiaoboalex 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jim_king_2000 的回复:]

问题是怎么确定哪个区间是单调的?

只要第一个数比最后一个数小,则区间是单调递增的。否则,区间有可能是循环区间。
[/Quote]
的确是这样!划分出来的区间至少有一个是单调的,也有可能两个都是单调的,只要比较首尾元素的大小就可以判定。
是我看错了,不好意思。
Jim_King_2000 2010-09-27
  • 打赏
  • 举报
回复
问题是怎么确定哪个区间是单调的?

只要第一个数比最后一个数小,则区间是单调递增的。否则,区间有可能是循环区间。
xiaoboalex 2010-09-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jim_king_2000 的回复:]

有一个循环有序数组,比如345612,在这个数组里面查找某个数,要求其复杂度小于N

1: 直接二分,得到两个区间,其中必有一个区间是单调的。
判断被查找数是否在单调区间内。若在,则变成普通二分查找。
若不在,去掉该单调区间,goto 1.
[/Quote]
问题是怎么确定哪个区间是单调的?

这个问题是不是漏掉了一个条件:该循环有序数组是一个等差序列
如果加上这个条件,我觉得这个问题有两种处理方式:
1. 已知min和max: 只要取数组的第一个元素和min进行比较,然后就知道min和max的位置了,由于是等差序列,根据min和max的位置查找某个数是很容易的。
2. 不知道min和max:那就从头遍历数组,依次比较相邻元素,当发现n>m时就可以确定min=m, max=n,然后根据min, max的位置进行查找;如果遍历了N-1次到达数组尾部以后还是没有发现n>m,就可以认为 min=第一个元素, max=最后一个元素,然后进行查找。
ayw215 2010-09-27
  • 打赏
  • 举报
回复
1,二分查找
2,最差的情况貌似是 两个链表一个长m,一个长n,需要比较m+n-1次
Jim_King_2000 2010-09-27
  • 打赏
  • 举报
回复
有一个循环有序数组,比如345612,在这个数组里面查找某个数,要求其复杂度小于N

1: 直接二分,得到两个区间,其中必有一个区间是单调的。
判断被查找数是否在单调区间内。若在,则变成普通二分查找。
若不在,去掉该单调区间,goto 1.
colorfulcode 2010-09-27
  • 打赏
  • 举报
回复


64,649

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧