想了很久一直想不明白为什么程序员喜欢脑筋急转弯式的智力题,一直觉得这些题目简单,或者看运气能不能做出来。后来突然发现原来程序员是一群自认为聪明,而且不喜欢被领导的人,所以程序员当然也喜欢秀智商的优越性了。而且程序员从事的工作创造性、可靠性要求很高,或者很多时候很多问题的解决方案往往都在灵光一现,这种考验基础或者应变能力的题目其实也是有一些真实的用武之地的,同时也可以考察程序员是否细心了。所以很多公司特别是大公司就特别喜欢算法类的题目,小公司往往更喜欢基础和编写复杂的程序题目,其实算法类题目还有公司装逼的成分哈。
本文中作者收集了基础的算法题目,并对他们进行分类整理。仔细思考常用算法,发现它们的考察知识点也是固定的,常用的知识点有:组合数学、线性规划、概率论、数论、动态规划、空间换时间、递推等思想。所以本文的目录如下:
一、组合数学题目
二、线性规划题目
三、概率论题目
四、动态规划题目
五、空间换时间题目
六、递推找规律题目
七、利用已有算法特性的题目
八、其他脑筋急转弯题目
九、拆分成子问题
十、其他简单题目可编程
一、组合数学面试题目
1. N*N的方格有多少个矩形? 难度: *
2. 1, 2, 3, ... , N 个数依次入栈、出栈有多少种出栈序列? 难度: **
二、线性规划题目
1. 一个棍子折成三端、组成三角形的概率。 难度: **
2.
三、概率论题目
1. 一个随机数产生器,以p的概率输出1,1-p的概率输出0。请使用这个随机数产生器构造50%输出0, 50%输出1的随机数产生器。 难度: **
2. 有一个无线长的序列,给你一个长度为N的数组。对序列进行采样,是的任意时刻,采样得到的序列尽量均匀。 难度: **
四、动态规划题目
1. N个节点,深度为K的二叉树有多少个? 难度: *****
2. N个节点的全连通图有多少个? 难度: *****
五、空间换时间题目
1. 很多访问记录,有访问时间和关闭时间,求解任意时刻、时间段的访问人数。 难度: *
六、递推找规律题目
1. 两个玻璃球,有100层楼,用最少的次数试出那一层楼玻璃球会被摔碎。 难度: ***
2. 有N个灯,一开始全亮。第一次把1的倍数的灯全部关闭,第二次把2的倍数的灯全部打开,依次直到N。求最终亮灯数目。 难度: **
3. 给定一个数N。求小于等于N的数字中出现了多少个1。
4. 有两堆石子,一堆M个,一堆N个。甲乙两人次拿石子,可以拿1个或2个。求谁将获胜。 难度: **
七、利用已有算法特性的题目
1. 求解数组中逆序对的数目。 难度: ***
2. 多路数组归并求交集。 难度: ***
3. N个字节的数据,存储在一个机器上。每台机器的读写速度为1/N,用最快的速度把数据分发到所有的机器上。 难度: ***
4. 手动开根号???
八、其他脑筋急转弯题目
1. 金条切两刀,但是可以让工人为你工作7天。而且报酬均等。
九、拆分成子问题
1. N级台阶,可以一次上1级,也可以一次上2级。求上台阶的可能走法。
2. 有两个文件,每个文件每行为1K的数据。总共有1亿行,如何快速的求解两个文件
十、其他简单题目、可编程
1. 给定中序、先序,验证后续遍历输出序列。
2. 有一个数组,里面只有一个元素出现1次,其他的元素均出现2次。求出这个元素。
有一个数组,里面只有两个元素出现1次,其他的元素均出现2次。求出这两个元素。
有一个数组,里面只有一个元素出现1次,其他的元素均出现3次。求出这个元素。