# 第 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 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。