# 第 3 节 把区间分成两个部分
温馨提示:本节的重点内容是:把区间分成两个部分,去掉一定不存在目标元素的区间,只在有可能存在目标元素的区间里查找。这样当
left
与right
重合的时候,我们才可以确定找到了目标元素(或者确定搜索区间里不存在目标元素)。
上一节我们讲解了「力扣」上一类二分查找问题的共同特点,这一节我们讲解针对这一类问题的解法。第 3 节和第 4 节是重点,但 绝对不是难点,刚开始可能会不习惯,题目做多了,就慢慢理解了。
我们再复习一下:
这些问题的共同特点(十分重要,请阅读 10 遍)
如果当前猜的数
nums[mid]
符合某个性质,我们还不能确定它一定就是我们要找的元素,必须向左边(或者向右边)继续看下去,才能确定nums[mid]
是不是我们要找的元素。
解决这一类问题可以「把区间分成两个部分」。这样的「二分查找」叫做「两边夹」或者叫「排除法」,思路其实很简单:
重点:每一次排除掉一定不存在问题答案的区间,把
left
和right
根据mid
看到的值逐渐向中间靠拢,直到它们重合。
如下图所示:
根据这种思路,我们就可以肯定:
- 找到了问题的答案(
left
和right
重合的位置就是问题的答案); - 或者搜索范围里不存在问题的答案。
大家常见的「二分查找」法的两个模板(其实是一个模板)就是这种思想的体现。
作者:liweiwei1419 链接:https://suanfa8.com/binary-search/divide-the-interval-into-two-parts 来源:算法吧 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。