返回

二分搜索的套路让你发挥自如

闲谈

二分搜索是一种高效的查找算法,广泛应用于计算机科学的各个领域。它是通过不断地将搜索范围减半来找到目标元素,这种方法使得二分搜索的平均时间复杂度为O(log n)。

二分搜索的套路非常简单,但它却十分强大。接下来,我就将带您一步一步地了解二分搜索的套路,并通过三道力扣的题目来检验您的理解程度。

套路一:确定搜索范围

二分搜索的第一步是确定搜索范围。搜索范围是指可能包含目标元素的数组或链表的子区间。确定搜索范围的方法有很多,常见的方法包括:

  • 对于数组: 可以使用左右指针来确定搜索范围。左指针指向数组的第一个元素,右指针指向数组的最后一个元素。
  • 对于链表: 可以使用头指针和尾指针来确定搜索范围。头指针指向链表的第一个节点,尾指针指向链表的最后一个节点。

套路二:计算中间索引

确定搜索范围后,就可以计算中间索引了。中间索引是指搜索范围的中点。计算中间索引的方法是将搜索范围的左边界和右边界相加,然后除以2。

套路三:比较目标元素和中间元素

计算出中间索引后,就可以将目标元素和中间元素进行比较了。如果目标元素等于中间元素,则说明目标元素已经找到。如果目标元素小于中间元素,则说明目标元素在中间元素的左边。如果目标元素大于中间元素,则说明目标元素在中间元素的右边。

套路四:更新搜索范围

根据目标元素和中间元素的比较结果,可以更新搜索范围。如果目标元素小于中间元素,则将搜索范围的右边界更新为中间索引减一。如果目标元素大于中间元素,则将搜索范围的左边界更新为中间索引加一。

套路五:重复步骤二到四

重复步骤二到四,直到搜索范围为空或找到目标元素。如果搜索范围为空,则说明目标元素不存在。如果找到目标元素,则返回目标元素的索引。

套路六:特殊情况的处理

在某些情况下,二分搜索需要进行一些特殊的处理。例如,当目标元素是数组或链表的第一个元素或最后一个元素时,二分搜索算法需要进行一些调整。

举个例子

为了让您更好地理解二分搜索的套路,我将举一个简单的例子。假设我们有一个数组[1, 3, 5, 7, 9, 11, 13, 15, 17, 19],我们要在这个数组中查找目标元素11。

  • 首先,确定搜索范围。搜索范围是数组的第一个元素和最后一个元素,即[1, 19]。
  • 然后,计算中间索引。中间索引是搜索范围的中点,即(1 + 19) / 2 = 10。
  • 然后,比较目标元素和中间元素。目标元素11大于中间元素10,所以目标元素在中间元素的右边。
  • 然后,更新搜索范围。搜索范围的左边界更新为中间索引加一,即11。
  • 然后,重复步骤二到四。中间索引更新为(11 + 19) / 2 = 15。比较目标元素和中间元素。目标元素11等于中间元素15,所以目标元素已经找到。

力扣题目

为了检验您对二分搜索的理解程度,我还准备了三道力扣的题目来考验您。

  • 875.爱吃香蕉的珂珂(Medium)
  • 1011.在D天内送达包裹的能力(Medium)
  • 我们前文 我作了首诗,保你闭着眼睛也能写对二分查找 详细介绍了二分搜索的细

希望您能通过这些题目更好地理解二分搜索的套路,并能够在您的项目中熟练地使用二分搜索算法。