面试算法爱好者书籍/OJ推荐

这个书单也基本适用于准备面试。

一、教科书

基本上一般的算法课本介绍的范围都不会超出算法导论和算法引论的范围。读完这两本书,其它的算法课本大致翻翻也就知道是什么货色了。

1. 算法导论

这本书的内容用三个字来总结。就是伟光正。

基本上囊括了经常使用算法的方方面面,证明巨细无遗,十分适合刚開始学习的人阅读。

可是这本书的一大问题就是,证明尽管具体。却从未解释算法背后的理由。仅仅告诉你怎样去做,却从未探讨过为何如此去做。

2.算法引论(Introduction to Algorithms, a Creative Approach)

算法导论告诉我们how。这本书就力图告诉我们why。书中极为强调的数学归纳法是建立算法设计思维的重要一步。

另外,这本书的习题中有非常多常见的面试难题,包含skyline、众数和名人问题。

3.Algorithms on Strings, Trees and Sequences

前两本书对于一般的算法描写叙述已经比較全面了。

可是在字符串相关算法方面。这本书不可不读。读完之后,对字符串算法的全貌就会有一个了解,包含后缀树和AC自己主动机这些寻常不太easy接触到的数据结构。

作者是做生物的,所以后面有一些关于生物的应用,直接忽略就好,没神马意思。

4.具体数学

这本书和前三本相比,就学院化了非常多。是非常数学的一本书,可是里面介绍的非常多思想和样例都非常好玩。

有大把时间就能够读读娱乐。没时间就算了。

二、杂书

5. Algorithmic Puzzles

相比前面那几本大作,这本小书更像是一本脑筋急转弯的collection。

可是别小看这本书。它在题目之前提到的解题模式。是有着广泛应用的。

6. 算法设计与分析基础

由于提到了上面那本书,这本书也就不得不提一下。算法设计与分析基础,相同总结了相似的解题方法,所以这两本书可能是个互相“借鉴”的关系。

这本书的问题是,想法尽管好,可是习题实在是太烂了。烂到你不须要掌握他的那些想法就能解出来。

所以随便看看就好。

7. 挑战程序设计竞赛

 

一本新的程序设计竞赛解说书籍。

这本书相对于黑书。难度可能略有下降(我曾经匆匆看过黑书),可是同一时候语言文字上好了两个数量级。反正我们也不是专业搞ACM竞赛的。难度上看这本书足够。

三、面试算法

面试算法中有非常多非常tricky的东西,在书本中不会提到。在竞赛中也非常少遇到(某人将其命名为folk algorithms, 乡野算法)。这时候就须要专门用来准备面试的书籍登场了。

8. Cracking the Code Interview

这书的题目难度比較正常。可是覆盖面够广。

假设放在两年前,这本书基本覆盖了全部popular的面试算法题目。

9. Elements of Programming Interviews

这本书是一本非常讨厌的书。内容新且难。每一个带Ninja标志的题目都值得好好琢磨。可是EPI的语言非常糟糕。

有的题目你得结合答案解说来看才明确题目是什么意思。有的题目你得结合代码来看才知道题目是什么意思。

另外这本书开头的解题模式也值得好好研读。

四、Online Judge

自己主动化的在线评測系统。

我认真做过的仅仅有两个:

10. Leetcode。

http://oj.leetcode.com

至今收集了150道面试算法题目,提供了在线的testcase自己主动測试。当中还颇有几道难题。

当然大部分事实上是莫名其妙的水题。

一般来说leetcode认真做完,认真总结。全面理解,应对一般的面试算法就不成什么问题。

11. USACO training

这个training的前三章没有超出leetcode难度太多。并且题目也不常见,是些非常好的补充。从第四章開始。难度就開始碾压一般面试算法了。

量力而行。

 

http://zalgorithm.com/blog/rhoaias/2014/04/14/%e9%9d%a2%e8%af%95%e7%ae%97%e6%b3%95%e7%88%b1%e5%a5%bd%e8%80%85%e4%b9%a6%e7%b1%8doj%e6%8e%a8%e8%8d%90/

最新文章

  1. 解决rand()伪随机数
  2. Vue.js起手式+Vue小作品实战
  3. 我的第一个FluentNHibernate例子
  4. SQL Server如何添加登录名
  5. Quartz 2D 图形上下文栈 矩阵 裁剪
  6. How to drop a PostgreSQL database if there are active connections to it?
  7. static与线程安全 -摘自网络
  8. Android(java)学习笔记216:多线程断点下载的原理(Android实现)
  9. C语言中内存分配 (转)
  10. 第一章ASP.NET SignalR简介
  11. jQuery第十一章
  12. python顶级执行代码
  13. 浏览器出现Cannot set property 'onclick' of null的问题
  14. 安卓高级7 vitamio 视频框架 从raw文件下获取文件uri
  15. 解决 Docker Image的UTF-8中文字符集的问题(以Oracle为例)
  16. base和this的用法
  17. linux的nohup命令
  18. PV原语操作详解
  19. 根据http获取的String数据,String数据中含有其他的字符时
  20. python 函数参数 *a **kw

热门文章

  1. 制作不随浏览器滚动的DIV-带关闭按钮
  2. npm 安装出现 UNMET DEPENDENCY 的解决方案
  3. react-native 适配问题
  4. Jackson对泛型的序列化和反序列化方法汇总
  5. Could not change executable permissions on the application
  6. n*n的正方形网格中有多少个长方形
  7. pycharm的todo和fixme标记,标志为今后再做和bug点
  8. Java常见面试题汇总(一)
  9. table 设置边框
  10. 关于mysql的表名/字段名/字段值是否区分大小写的问题