image

编辑人: 长安花落尽

calendar2025-07-25

message0

visits134

二分搜索边界:左闭右开与左闭右闭的奥秘

在 CSP-J 备考中,算法部分是至关重要的一环,而二分搜索作为其中的高频考点,其边界条件的处理更是让许多同学感到困惑。今天我们就通过“查找第一个大于等于 x 的元素”这个实例,来深入探讨左闭右开和左闭右闭区间的选择差异,并总结通用的边界条件判断模板。

首先,让我们明确什么是二分搜索。二分搜索是一种高效的查找算法,适用于已排序的数组。它通过不断将搜索范围缩小一半来快速定位目标元素。

接下来,我们看左闭右开区间和左闭右闭区间的概念。

左闭右开区间表示为 [left, right),这意味着左端点包含在搜索范围内,而右端点不包含。

左闭右闭区间表示为 [left, right],即左右端点都包含在搜索范围内。

以“查找第一个大于等于 x 的元素”为例。

假设我们有一个有序数组 nums

如果使用左闭右开区间 [left, right)

在每次迭代中,计算中间位置 mid = left + (right - left) / 2 (这样可以避免整数溢出)。

如果 nums[mid] < x,说明目标元素在 mid 的右侧,此时更新左端点 left = mid + 1

如果 nums[mid] >= x,说明目标元素可能在 mid 或其左侧,此时更新右端点 right = mid

left == right 时,搜索结束,此时的 left 就是第一个大于等于 x 的元素的位置。

如果使用左闭右闭区间 [left, right]

中间位置的计算方式相同。

nums[mid] < x 时,更新左端点 left = mid + 1

nums[mid] >= x 时,更新右端点 right = mid - 1

left > right 时,搜索结束,此时的 left 就是第一个大于等于 x 的元素的位置。

通过以上对比,我们可以总结出通用的边界条件判断模板:

对于左闭右开区间:

  • target < nums[mid] 时,left = mid + 1
  • target >= nums[mid] 时,right = mid
  • 终止条件:left == right

对于左闭右闭区间:

  • target < nums[mid] 时,left = mid + 1
  • target >= nums[mid] 时,right = mid - 1
  • 终止条件:left > right

在备考过程中,同学们要理解这两种区间的本质区别,并通过大量的练习来熟练掌握它们的应用。同时,注意边界条件的处理,避免出现死循环或越界错误。

总之,二分搜索的边界条件虽然有些复杂,但只要掌握了其规律和方法,就能在考试中灵活运用,为取得好成绩打下坚实的基础。希望大家在备考 CSP-J 时能够充分重视这一知识点,通过不断的练习和总结,熟练掌握二分搜索的各种变体。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:二分搜索边界:左闭右开与左闭右闭的奥秘

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share