有哪些值得推荐的好的算法书?
学习算法,切记不要一上来就开始啃《算法导论》,毕竟这本书并不适合新手学习,如果你之前的算法基础比较薄弱,只会一直陷在“拿起来又放下”的循环里。
可以怎么入门呢?建议还是看书+实战,实战当然也不是说要去肝ACM或者是topcoder什么的,基本上来我们LintCode刷刷题也就够了。
如何学习算法?
算法,其实可以分为三种。算法、面试算法、竞赛算法。
算法
也就是算法本身,推荐一些书籍。
1.入门系列
《算法图解》:“像小说一样有趣的算法入门书”,主打“图解”,通俗易懂
《大话数据结构》:把理论讲得有趣不枯燥;每个数据结构和算法,作者都结合了生活中的例子,能让你有非常直观的感受。
2.教科书系列
《数据结构与算法分析》:很多大学都拿它当作教材,非常系统、全面、严谨,适合掌握了至少一门编程语言的同学。
作者也很贴心,这本书有三种语言的版本:《数据结构与算法分析 : C 语言描述》《数据结构与算法分析 : C++ 描述》《数据结构与算法分析 : Java 语言描述》。
3.进阶之旅
《算法导论》:有了一定基础之后,就可以开始啃这本大部头了。
4.扩展阅读
《算法之美》:算法科普,从生活中的各种问题说起:租房、谈恋爱、老虎机、拍电影、面试、买**、各种排序、找停车位、寻找新药、临床试验、奥巴马拉赞助、预估电影票房等等,非常生活化,可以作为补充阅读。
《算法帝国》:同样是科普类书籍,并无涉及算法的原理与实现细节,也可以作为补充阅读。
5.殿堂级
《计算机程序设计艺术》:包含很多卷,深度、广度、系统性、全面性是其他所有数据结构和算法书籍都所无法相比。可以当做一种挑战~
图片来自极客时间《数据结构与算法之美》
面试算法
要说最快掌握面试算法的捷径,还是脚踏实地着多动手去刷题,多刷题。
当然,在LintCode开始刷题,首先你也也得具备一定的基础,这些基础包括:
对算法题来说有两大法宝,“拿到题选什么算法”和“如何实现这个算法”,后者会更容易一些,所以可以先从实现算法开始练起(LintCode的分类阶梯训练)。
然后当一些标准算法数据结构都不陌生后,再去训练新题,尝试用各种算法解决各种不同的问题。
当然,针对面试准备,也有一些书:
《剑指 Offer》:几乎包含所有常见的、经典的面试题,是应对面试的必读书籍
《编程之美》:适合准备面试FLAG大厂时候用来刷题
竞赛算法
算法学习最好由浅入深,先了解算法思维,再去理解实际应用;
当逐步全面的掌握相关知识体系,有一定实践经验后,可以去参加一些竞赛提升自己的算法能力。
竞赛算法是比较锻炼人的,对于竞赛来说,每道题对输入参数和样本量的要求都非常明确,包括对空间的限制和运行时间的限制也规定的非常明确。每一个竞赛选手都非常熟练怎么根据这些提前给好的限制,反推出自己需要实现一个什么样复杂度的解法才能通过。所以对思维和逻辑上的锻炼是非常有效的。
献上一些面试常考算法类型和经典题,愉快地刷起来吧~
双指针算法
最长无重复字符的子串
装最多水的容器
接雨水
有效回文串
带环链表 II
排序算法
摆动排序
构造队列
Nuts 和 Bolts 的问题
第k大元素
无序数组K小元素
逆序对
区间和的个数
二分法
寻找旋转排序数组中的最小值
搜索旋转排序数组
对x开根
两个整数相除
寻找峰值
宽度优先搜索
单词接龙
岛屿的个数
二叉树的层次遍历
克隆图
二叉树的锯齿形层次遍历
二叉树的右视图
递归
生成括号
格雷编码
平衡二叉树
电话号码的字母组合
全排列
二叉树中的最大路径和
遍历
买卖股票的最佳时机 III
最大子数组 II
二叉树的层次遍历
二叉树的前序遍历
二叉树的后序遍历
二叉树的所有路径
二叉树的层次遍历 II
分治法
两个排序数组的中位数
合并k个排序链表
平衡二叉树
二叉树中的最大路径和
验证二叉查找树
深度优先搜索
二叉树的最小深度
插入五
克隆图
单词接龙 II
分割回文串
N皇后问题
动态规划
最大的假期天数
爬楼梯关注问题
正则表达式匹配
打劫房屋
单词拆分 I
乘积最大子序列
解码方法关注问题
编辑距离
看完这个回答后,有件小事,能帮助你快速提升自己哟:
免费试听我主讲的九章算法班 2020,除了会讲如何高效刷题、掌握面试算法外,还会谈谈面试中正确沟通的技巧,培养coding style和bug free的能力。覆盖90%国内外一线大厂算法面试高频考点,帮助你1个月内搞定算法面试。本周日的首节直播分享中,将会送出算法面试精选100题,刷题100道胜过别人刷300道,有兴趣的同学可以来看看!