# 第 10 节 从学习「二分查找」总结算法学习的方法

提示:这一节的内容也适用于绝大多数算法与数据结构问题的学习。不能保证所有的问题都可以得到解决,但是为大家提供了一个学习和解决问题的思路。方向需要正确,态度也要对,不能指望凡事都有捷径,需要踏实、努力。

# 不迷信模板

「模板」是基于对知识和题型的掌握比较熟悉的情况下,并且是在竞速类的算法竞赛问题中,才有用的东西,也是一个「黑话」,请大家正确看待模板的作用和意义。

写代码应该保证思路清楚,然后才能编码正确,不应该套用模板,而应该对症下药,因为弄清楚要解决什么问题,才使用什么方法。而不应该拿着一个一个现成的(可能只能解决部分问题的)方法去尝试问题的解。

写对「二分查找」问题的关键:

  • 根据题意,分析清楚我们要查找的问题的范围是什么,也就是左右边界是什么;
  • 根据题目中的 单调性 或者其它可以缩小搜索范围的条件,去思考在什么什么情况下,搜索的范围是什么,进而设计 ifelse 怎么写,是不是包含 mid 位置的值,下一轮搜索是向左边走还是向右边走;
  • 不可以背模板,然后填空,这是错误的学习方法。

# 认真看题

很多问题不应该空想,应该仔细审题,分析可以采用某种方法的原因(即合理性)。

# 编码需要做到语义清晰

明确知道每一个变量的含义,并且保证变量的含义始终不变,是写对代码的前提。

# 调试

调试和在纸上打草稿,是最有效的思考和解决问题的方法,也是「空间换时间」思想的体现。很多问题,在脑子里想不好想,画一个图,用一个具体的例子去寻找一般规律,做一些简单的计算,就容易很多了。

我明白 int mid = (left + right + 1) / 2; 就是把 leftrightmid 的值打印出来看一眼,就是这么简单的方法最有效。

# 思考

思考可以这样做的原因,而不是直接记住怎么做。经常问一下自己:这道题为什么可以这样做。

# 总结与输出

把自己心中有口中无的东西表达出来,把别人讲懂,也能加深自己对知识的理解。

# 不要完美主义

题是做不完的,做算法题的作用:

  • 通过面试;
  • 通过算法问题理解算法思想。

作者:liweiwei1419 链接:https://suanfa8.com/binary-search/summarize-learning-methods 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

Last Updated: 11/18/2024, 11:23:03 PM