# 第 3 节 把区间分成两个部分

温馨提示:本节的重点内容是:把区间分成两个部分,去掉一定不存在目标元素的区间,只在有可能存在目标元素的区间里查找。这样当 leftright 重合的时候,我们才可以确定找到了目标元素(或者确定搜索区间里不存在目标元素)。

上一节我们讲解了「力扣」上一类二分查找问题的共同特点,这一节我们讲解针对这一类问题的解法。第 3 节和第 4 节是重点,但 绝对不是难点,刚开始可能会不习惯,题目做多了,就慢慢理解了。

我们再复习一下:

这些问题的共同特点(十分重要,请阅读 10 遍)

如果当前猜的数 nums[mid] 符合某个性质,我们还不能确定它一定就是我们要找的元素,必须向左边(或者向右边)继续看下去,才能确定 nums[mid] 是不是我们要找的元素。

解决这一类问题可以「把区间分成两个部分」。这样的「二分查找」叫做「两边夹」或者叫「排除法」,思路其实很简单:

重点:每一次排除掉一定不存在问题答案的区间,把 leftright 根据 mid 看到的值逐渐向中间靠拢,直到它们重合。

如下图所示:

根据这种思路,我们就可以肯定:

  • 找到了问题的答案(leftright 重合的位置就是问题的答案);
  • 或者搜索范围里不存在问题的答案。

大家常见的「二分查找」法的两个模板(其实是一个模板)就是这种思想的体现。


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

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