# 第 9 节 写对「二分查找」的经验

# 认真看题目、认真审题

这是我在这个专题里写过很多次的,我写题解的时候总会花一定篇幅写理解题意,「二分查找」的问题,仔细看题,理解题目的意思很关键。

认真审题无比重要:经常看到有朋友说,不知道向左边走还是向右边走,左边界变量和有边界变量如何设置,right 设置成 len 还是 len - 1。重要的事情说三遍:

  • 这些问题一定要回到题目中寻找答案,不看题是得不出结论的;
  • 这些问题一定要回到题目中寻找答案,不看题是得不出结论的;
  • 这些问题一定要回到题目中寻找答案,不看题是得不出结论的。

# 找到问题的「单调性」或者「可以逐步缩小搜索区间」的原因

一定要找到某种单调性,才可以根据在区间 [left..right] 里猜的一个数 mid 的性质,决定:

  • mid 是否有可能是解;
  • 下一轮搜索是在 mid 的左边还是在右边继续查找。

# 一定要弄清楚要找的元素满足什么性质

认真审题,分析清楚题目要我们找的元素需要满足什么性质,如果需要找的元素的性质分析错误,得到的答案也是错误的。

# 从反面思考不容易错(重点)

提示:如果你看我写的题解看得多了,或者自己做的题目多了,就能理解我说的这句话是什么意思。

这是一个经验,有个别问题不是这样。在生活中的例子是:我们可以很清楚的知道我们不想要什么。做题的例子是:

「力扣」第 35 题:找第一个大于等于 target 的元素的下标。思考得时候,先考虑这个性质的反面:如果某个数 nums[mid] 严格小于 target,那么 mid 以及 mid 的左边一定不存在「第一个大于等于 target 的元素」,下一轮搜索应该在区间 [mid + 1..right] 继续查找,此时设置 left = mid + 1

这样的例子还有很多,如果大家在题解区看到我的题解,我都会在注释里写上类似的分析,在这里就不多举例了。


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

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