在准备算法题的过程中,除了基本的典型的解决方法之外,也可以发现一些通用的思考点和解决方法。这样对一般较为通用的问题,能较快的给出一个不太完美的方案或者渐进的逐步进行优化。
1. 约束的转换:时间复杂度和空间复杂度
往往可以通过5中的额外存储,记录之前的计算结果或重复运算达到拿空间换时间的目的,进而Trade Off时间复杂度与空间复杂度。
2. 预处理
排序 ,目的能用二分查找,加速搜索。
3. 搜索方法
很多问题最后会转换为一个搜索问题。
可以沿着一般的:
二分查找搜索,树遍历,图遍历等形式搜索解空间。
4. 树剪枝
利用条件约束和先验知识进行算法的优化剪枝,加速整个搜索过程。
5. 额外存储
Hash,Topk: 堆,去重等。
综上,多发现题目中的共性,并将常用的优化方式进行总结,才能在手写算法的过程中游刃有余。
友情推荐:ABC技术研习社
为技术人打造的专属A(AI),B(Big Data),C(Cloud)技术公众号和技术交流社群。