面试中遇到的算法题

  又开始找工作了,这已经是一年之中的第三次了。这几天面试了几家公司,无论笔试还是面试中,总有些类似的算法题,在这里留个标记,以防以后再次遇到,有我的思路,也有搜索的结果,好的题解我都贴出了连接。

  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  阅读(253)  评论(0编辑  收藏  举报

导航