基础说明
二分查找(binary search)适用于在已经排序的数组中或者其他有严格顺序关系的数据结构中查找某个特定的元素,核心的方法是每次将查找范围缩减一半。
思路说明:
- 初始化边界:初始左边界
left=0
,右边界right=arr.length-1
- 中间位置始终是:
mid = left+(left+right)/2
- 比较中间值:
- 如果
arr[mid]==target
,查找结束,返回 - 如果
arr[mid]<=target
,边界往右推left=mid+1
,继续比较 - 如果
arr[mid]>=target
,边界往左推right=mid-1
,继续比较
- 如果
- 重复比较的动作直至找到目标值或者
left>right
时间复杂度:O(log n) 空间复杂度:O(1)
LeetCode 704 二分查找
题目就叫二分查找
1 |
|
LeetCode 35 搜索插入位置
二分查找的小变种,需要在标准解法里面注意一下target是小于所有制还是大于所有值,所以要么默认最大,每次变小,要么就默认最小,每次变大。
1 |
|
LeetCode 278 第一个错误版本
这个题目算是二分的一个变种,把数组变成了数字,返回第一个错误的版本而不是下标,其他的没有差别。
1 |
|