# 第 10 节 从学习「二分查找」总结算法学习的方法
提示:这一节的内容也适用于绝大多数算法与数据结构问题的学习。不能保证所有的问题都可以得到解决,但是为大家提供了一个学习和解决问题的思路。方向需要正确,态度也要对,不能指望凡事都有捷径,需要踏实、努力。
# 不迷信模板
「模板」是基于对知识和题型的掌握比较熟悉的情况下,并且是在竞速类的算法竞赛问题中,才有用的东西,也是一个「黑话」,请大家正确看待模板的作用和意义。
写代码应该保证思路清楚,然后才能编码正确,不应该套用模板,而应该对症下药,因为弄清楚要解决什么问题,才使用什么方法。而不应该拿着一个一个现成的(可能只能解决部分问题的)方法去尝试问题的解。
写对「二分查找」问题的关键:
- 根据题意,分析清楚我们要查找的问题的范围是什么,也就是左右边界是什么;
- 根据题目中的 单调性 或者其它可以缩小搜索范围的条件,去思考在什么什么情况下,搜索的范围是什么,进而设计
if
和else
怎么写,是不是包含mid
位置的值,下一轮搜索是向左边走还是向右边走;- 不可以背模板,然后填空,这是错误的学习方法。
# 认真看题
很多问题不应该空想,应该仔细审题,分析可以采用某种方法的原因(即合理性)。
# 编码需要做到语义清晰
明确知道每一个变量的含义,并且保证变量的含义始终不变,是写对代码的前提。
# 调试
调试和在纸上打草稿,是最有效的思考和解决问题的方法,也是「空间换时间」思想的体现。很多问题,在脑子里想不好想,画一个图,用一个具体的例子去寻找一般规律,做一些简单的计算,就容易很多了。
我明白 int mid = (left + right + 1) / 2;
就是把 left
、right
和 mid
的值打印出来看一眼,就是这么简单的方法最有效。
# 思考
思考可以这样做的原因,而不是直接记住怎么做。经常问一下自己:这道题为什么可以这样做。
# 总结与输出
把自己心中有口中无的东西表达出来,把别人讲懂,也能加深自己对知识的理解。
# 不要完美主义
题是做不完的,做算法题的作用:
- 通过面试;
- 通过算法问题理解算法思想。
作者:liweiwei1419 链接:https://suanfa8.com/binary-search/summarize-learning-methods 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。