面试中遇到的算法题
又开始找工作了,这已经是一年之中的第三次了。这几天面试了几家公司,无论笔试还是面试中,总有些类似的算法题,在这里留个标记,以防以后再次遇到,有我的思路,也有搜索的结果,好的题解我都贴出了连接。
1. 输出一列数字的全排列?
妈的,这题一看不就是递归嘛,但具体实现起来我是真不会了,下面是一种解法:
http://www.cnblogs.com/nokiaguy/archive/2008/05/11/1191914.html
perm(p) = r1perm(p1), r2perm(p2), r3perm(p3), ... , rnperm(pn)
这个思路我也知道,但是如何保存每次已经组合完的数列,我不会了,其实根本就不用保存,该文作者用swap的方法解决了这个问题。
2. 在m(比如有1亿个数)个数中找出最大的n个数?
下面是一篇文章有着很好的解题思路,一步步对算法进行优化。
http://blog.csdn.net/winsunxu/article/details/6219376
我简单说一下我的思路吧,维持一个n个数大小的有续集,遍历一遍m,如果大于n中的最小数,则跟有序集中的一个数交换。至于这个有续集,可以采用堆排序来维护(弄明白堆排序)。
3. 只给出一个单链表的头指针,如何判断该链表中是否存在环?
这题其实很简单,就怕你想不到。
我就被这“一个”给蒙住了,其实可以用2个指针,一起来遍历这个链表,一个步长是1,一个步长是2,如果找到了null指针说明没有环,如果2个指针相同了说明有环,这两种可能一定会出现一种。就像2个人绕着操场跑步,一个快一个慢,一定会压圈的。
4. 求一个数列的最大子数列的和
自己写过的博客,竟然忘了最有子策略的公式,丢死了人了。
5. 最大连续子串
这个也是我写过的一个博客,矩阵法,简单易理解。
6. 200m的内存,2G的文件,文件中存储32位整数数列,请把这个数列排序并输出到另一个文件中
像这种大文件排序,一般是先把大文件切割成几个可以加载的小文件,然后对每个文件排序,然后对多个文件进行多路归并排序,然后再多路归并排序……,然后就有续了。
posted on 2012-10-17 23:09 favourmeng 阅读(254) 评论(0) 编辑 收藏 举报