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