github:https://github.com/ChopinXBP/JZOffer_Babel/
《剑指Offer》以面试题为主,代码大都不长。比较适合两种人,第一种是新手入门,第二种是面前备战。
我就是以新手的姿态来刷这本书的,每一道题先按自己的思路写一遍,然后尽可能尝试所有的方法实现并调优,然后再把感想和总结以博客的形式进行记录和分享。
由于本人学习语言主Java,辅C++,所以每题用Java写完后都会再过一下C++的解法过程,但是大多数算法题上两者基本思想没有区别,只是实现方式不同。
前面的题目因为不是很难,可能记录不是很多,后面开始比较用心地进行原理和方法的剖析,每道题都用几乎所有可行的方法进行了实现和调优,大多数题目都附上了测试用例,少数题目进行了一些升级和扩充。
附上每道题解答传送门之前会对该题进行评分评价。评价方式分为两点,实现难度指的是不考虑复杂度完成代码通过的难度(决定题目难度下限),优化难度指的是写出考虑周全且复杂度降至最低的算法的难度(决定题目难度上限),且优化难度不小于实现难度。评价基线为刷这道题的新手平均水平,满分★★★★★。困难评级直接参考优化难度。
欢迎大家点赞关注收藏!
1. 二维数组中的查找(实现难度:★★,优化难度:★★) 简单
关键词:数组、动态规划、二分查找
#数据结构与算法学习笔记#剑指Offer1:二维数组中的查找(JAVA、C/C++)
2. 替换空格(实现难度:★,优化难度:★★) 简单
关键词:字符串、replaceAll
#数据结构与算法学习笔记#剑指Offer2:替换空格(Java、C/C++)
3. 从尾到头打印链表(实现难度:★,优化难度:★) 简单
关键词:栈、链表
#数据结构与算法学习笔记#剑指Offer3:从尾到头打印链表(Java、C/C++)
4. 先序遍历+中序遍历重建二叉树(实现难度:★★★☆,优化难度:★★★☆) 中等
关键词:找规律、递归、二叉树、先序遍历、中序遍历
#数据结构与算法学习笔记#剑指Offer4:先序遍历+中序遍历重建二叉树(Java、C/C++)
5. 用两个栈实现队列(实现难度:★★,优化难度:★★) 简单
关键词:栈、队列
#数据结构与算法学习笔记#剑指Offer5:用两个栈实现队列(Java、C/C++)
6. 旋转数组的最小数字(实现难度:★★☆,优化难度:★★☆) 简单
关键词:数组、二分查找
#数据结构与算法学习笔记#剑指Offer6:旋转数组的最小数字(Java、C/C++)
7. 斐波那契数列(实现难度:★★★,优化难度:★★★☆)中等
关键词:斐波那契数列
#数据结构与算法学习笔记#剑指Offer7:斐波那契数列的四种编程实现方法 + 测试用例(Java、C/C++)
8. 普通青蛙跳台阶+变态青蛙跳台阶(实现难度:★★★★,优化难度:★★★★)困难
关键词:斐波那契数列、找规律、公式推导
#数据结构与算法学习笔记#剑指Offer8:普通青蛙跳台阶+变态青蛙跳台阶+最清晰数学归纳法证明(Java、C/C++)
9. 矩形覆盖(实现难度:★★★☆,优化难度:★★★☆)中等
关键词:斐波那契数列、找规律
#数据结构与算法学习笔记#剑指Offer9:矩形覆盖智力题+斐波那契数列(Java、C/C++)
10. 求二进制中1的个数(实现难度:★,优化难度:★★★☆)中等
关键词:位运算、找规律
#数据结构与算法学习笔记#剑指Offer10:位运算:求二进制中1的个数+四种解法比较+测试用例(Java、C/C++)
11. 求数值的整数次方(实现难度:★☆,优化难度:★★☆) 简单
关键词:库函数、浮点数、找规律
#数据结构与算法学习笔记#剑指Offer11:求数值的整数次方/实现库函数pow + 判断double为0 + 测试用例(Java、C/C++)