上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
总结
学习算法以便更好地面试或刷力扣(LeetCode)题目,并不需要掌握高深的数学知识,很多“需要数学”的题目,数学方法并不是唯一解,通常也可以使用其他方法来解决。
掌握基础数据结构和算法知识永远是你提高自身能力的必要条件,没有这些底层知识很难往上走。另外,力扣(LeetCode)的题型就那么几种,算法思维也就那么几个,掌握这些常见的数据结构、算法思想对于解决新的题目来说至关重要。
时间复杂度分析是算法的基石,掌握它对我们学习后面的章节有很大的帮助。本章首先引入了衡量算法性能的好坏的方法和大O表示法,接着通过若干实例介绍了常见的时间复杂度,掌握相关分析方法就已经足够应付绝大多数算法问题了。对于迭代,分析起来比较简单,而分析递归可能就比较复杂了,需要辅助手段,本章介绍了递归树法和代入法。
掌握某种算法的复杂度规律后,有时根据题目的时间复杂度要求,就可以猜测出可能用到的算法,比如算法要求时间复杂度为O(logn),那么就有可能是二分法,关于这一点,将在第20章做更多的介绍。
空间复杂度分析比时间复杂度分析要简单得多,常见的空间复杂度有O(1)、O(n)、O(n2),而O(logn)、O(nlogn)、O(n!)这样的空间复杂度基本不会有。