二分
二分搜索
没有重复元素的有序数组 普通二分查找
重复元素的有序数组 左侧边界的二分搜索,右侧边界的二分搜索
左侧边界的二分搜索
当target存在数组nums中时,返回的是第一个重复元素的索引
当target不存在数组nums中时
例:nums[]=[2,3,5,7] target=4 返回的left=2
- left指向nums中大于target的最小元素索引
- 返回的是target应该插入的位置索引
- 返回nums数组中小于target的个数
右侧边界的二分搜索
返回的是最后一个重复元素的索引
二分搜索的应用
什么问题可以应用二分搜索?
- 从题目中抽象出一个自变量 x,一个关于 x的函数 f(x),以及一个目标值 target。
同时,x, f(x), target 还要满足以下条件:
- f(x) 必须是在 x 上的单调函数(单调增单调减都可以)。
- 题目是让你计算满足约束条件
f(x) == target时的x的值。
分析:自变量x是珂珂吃香蕉的速度,f(x)是吃完所有堆上所用时间。 x越大,吃的越快,所花时间f(x)就越小。吃香蕉的时间限制H就是target.
x的左右边界如何确定? 最小速度=1 最大速度堆上最大的香蕉个数 使用左侧边界的二分搜索
1 | class Solution { |
自变量x为船载重,f(x)为所有包裹送达所需时间。
二分答案
二分查找:在一个有序数据集上查找
二分答案:答案是某一个区间,在区间中二分
首先:要确定二分范围(答案的最大值和最小值)
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小沙同学个人博客!

