根据《剑指offer》中的题目,用python来进行编写
add 2018.8.2
历时一个多月,终于完成了《剑指offer》,里面很多题目很有意思,其变式在面经中经常看到,值得刷一刷。
但草草的刷了一遍之后,发现还有很多地方没完全掌握,应该花一点时间来总结一下
解决难题的三种方法:
- 画图
- 举例
- 分解
图形能使抽象的问题形象化。当面试题设计链表,二叉树等数据结构时,如果在纸上画几张草图,则题目中隐藏的规律就有可能变得很直观。
一两个例子能使抽象的问题具体化。很多与算法相关的问题都很抽象,未必一眼就能看出它们的规律。这时候我们不妨举几个例子,一步一步模拟运行的过程,说不定就能发现其中的规律,从而找到解决问题的窍门。
把复杂问题分解成若干个小问题,是可以解决很复杂问题的有效方法。如果我们遇到的问题很大,则可以尝试先把大问题分解成小问题,然后再递归地解决这些小问题。分治法/动态规划等方法应用的都是分解复杂问题的思路。
回溯法很适合解决迷宫及其类似的问题。如果面试题是求一个问题的最优解,那么可以尝试使用动态规划。加入我们在用动态规划分析问题时发现每一步都存在一个能得到最优解的选择,那么可以尝试使用贪婪算法。
编成的时候,需要全面考虑所有可能的输入,确保写出的代码在完成了基本功能之外,还考了了边界条件,并做好了错误处理。
降低时间复杂度的方法有两种:
- 改用更加高效的算法
- 用空间换取时间