从大量整数中选取最小/大的若干个

问题描述:现在有非常大量的一堆对象,比如有几十亿甚至上百亿个。对象本身是什么可以忽略,每个对象都有唯一标识符和一个正整数属性值,属性值范围有限(不大于一亿)。在单核机器上,内存和磁盘空间充足,用什么方法可以最快地输出属性值最小的若干(如一万)个对象,要求输出结果按照属性值排序。
程序基本功之遍历二叉树

最近工作忙,没时间思考复杂的问题了。正好要招人就得有面试的嘛,自己也温习一下,要不然怎么去问别人。
今天复习一下二叉树的遍历,前序(pre-order,NLR)、中序(in-order,LNR)、后序(post-order,LRN)、层序(level-order),用和不用递归。
计算斐波纳契数,分析算法复杂度

问题描述:Fibonacci数(Fibonacci Number)的定义是:F(n) = F(n - 1) + F(n - 2),并且F(0) = 0,F(1) = 1。对于任意指定的整数n(n ≥ 0),计算F(n)的精确值,并分析算法的时间、空间复杂度。
假设系统中已经提供任意精度长整数的运算,可以直接使用。
算法的复杂度与Master定理

平时设计或者阅读一个算法的时候,必然会提到算法的复杂度(包括时间复杂度和空间复杂度)。比如我们说一个二分查找算法的平均时间复杂度为O(log n),快速排序可能是O(n log n)。那这里的O是什么意思?这样的表达是否准确呢?
今天来复习一下与算法复杂度相关的知识:函数渐进阶,记号O、Ω、θ和o;Master定理。
求内积最大的子数组

之前在网上看到有好多人在讨论这道题,据说是一道Google的面试题。
问题描述:有两个长度均为 n 的整数数组 A 和 B,现在要从这两个数组中各抽出 s 个数字,分别构成两个新的数组 C 和 D,要求数组 C 和 D 的内积最大。
任务调度问题:资源占用与释放

据说这是2009年Google暑期实习招聘的笔试题。
问题描述:有n个任务,第i个任务运行时需要使用 R[i] 的资源,运行完毕后需要占用 O[i] 的资源(O[i] <= R[i]),假设现在我们总共有s的资源,要求设计一个调度算法,能保证所有任务能顺利执行;如果无法执行完,需要说明理由。
检测单向链表是否存在环

问题描述:在单向链表中,每个结点都包含一个指向下一个结点的指针,最后一个结点的这个指针被设置为空。但如果把最后一个结点的指针指向链表中存在的某个结点,就会形成一个环,在顺序遍历链表的时候,程序就会陷入死循环。我们的问题就是,如何检测一个链表中是否有环,如果检测到环,如何确定环的入口点(即求出环长,环前面的链长)。
