二分查找法

119 阅读1分钟

这是我参与「掘金日新计划 · 2 月更文挑战」的第 1天,点击查看活动详情

二分查找法

二分查找法(折中算法,设定一个中间的middle值)

image.png 在进行搜索的时候要对区间的定义比较明确
左闭右闭,左闭右开、左开右闭(前两者用的居多)
左闭右闭:left、right值都包括
左闭右开:left包括,right不包括
在循环中对边界做明确的定义。
左闭右闭二分法的代码:

1675179216178.png
当数组(middle大于target的时候,target在middle的left方位,所以查找的right的范围肯定不包括middle,且小于middle,所以middle-1)

image.png
当数组(middle小于target的时候,target在middle的right方位,所以查找的left的范围肯定不包括middle,且大于middle,所以middle+1)

image.png

如果是左闭右开区间,假设left等于1,right也等于1,左边界包含1,右边界不包含1,明显是个不合法的区间,所以left与right不相等

1675179288696.png

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

在升序数组 nums 中寻找目标值 target,对于特定下标 i(折中middle),比较 nums[i] 和 target 的大小:

  • 如果 nums[i]=target,则下标 i 即为要寻找的下标;

  • 如果 nums[i] > target,则 target 只可能在下标 i 的左侧;

  • 如果nums[i]<target,则 target 只可能在下标 i 的右侧。 1675179939750.png

1675179982767.png 复杂度分析

  • 时间复杂度:O(\log n)O(logn),其中 nn 是数组的长度。
  • 空间复杂度:O(1)O(1)。