题目本身不难:有两个整数数组,要求写一个算法,把两个中间重复的数,给找出来!没有说明,数组本身是有顺序的,还是无序的,也没有说同一个数组是否本身就有重复数我现在想到三个方法: 第一个最简单,写两个循环嵌套,从小的数组中取数,到大的中,一个一个地比。 第二个是先对两个数组排序,然后用二分法来查找。 第三个是用哈希表来实现,把一个集合写入到一个哈希且中,然后再用第二个来遍历它 用contains方法来实现判断以上三种方法都可以实现,但考虑是微软的笔试,不可能这么简单,肯定要考虑到算法的时间和空间复杂度。前两种都是O(n2),第三种不知道,哈希查找内部的是什么算法,所以无法得出结论。请各位高手,给我一点思路,有没有最好的一种方法,谢谢了!

解决方案 »

  1.   

    都可以...
    hash是最快的. O(1).数组用快排, O(nlogn), 也不需要二分查找, 遍历一遍就可以了.
    就这样, 别把面试题想的太复杂. 对于一般的SDE, SDET, 就是考经典算法. 不会有很难的题.
    不过, 就算是经典算法, 很多人还是不知道, 剩下知道的, 不一定就能在小黑板上手写不出错.正如一个快排, 属于做软件就应该知道的算法, 不过大部分人都不能手写一个无错的快排算法.
      

  2.   

    take it easy...一些经典算法, 比如最大子序列和啊, KMP啊, 装箱问题啊... 如果你能手写不出错, 再加上英语以及不错的头脑 , 那么, 微软, Oracle, IBM, SAP等顶级外企你都可以轻松进去.没有你想象的那么困难. 呵呵...
      

  3.   

    对,我就是应聘MS 的SDET 不过是vendor,现在是在准备二面了!这个题目是我一个刚刚成功入职的朋友发给我参考的!请问一下快排是什么方法?朋友。可否发我一个链接看一下。我一般都是用插入或者冒泡法
      

  4.   

    呵呵,就是那种,分两段排顺序,然后递归的那个方法呀。刚刚google一下就知道了。工作中没怎么用,以前记得N种方法,后来都忘记了。谢谢了!MS这个方法,比其它几个方法都快!