介绍
- 在一个单调(递增或递减)的区间[a1,an]中查找元素x,每次将区间分为左右长 度相等的两部分,判断解在哪个区间中并调整区间上下界,重复直至找到x。
- 复杂度O(lg n)
- 作用:查找元素是否存在(找出位置或值)求满足条件的最值。
算法原理
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|
7 | 10 | 21 | 25 | 43 | 46 | 57 | 57 | 65 | 78 | 90 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|
7 | 10 | 21 | 25 | 43 | 46 | 57 | 57 | 65 | 78 | 90 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|
7 | 10 | 21 | 25 | 43 | 46 | 57 | 57 | 65 | 78 | 90 |
代码
find1
满足a[x]>=k条件的最小的x。
mid=(L+R)/2;
if(a[mid]>=k) R=mid;
else L=mid+1;
find2
满足a[x]<=k条件的最大的x。
mid=(l+r+1)/2;
if (a[mid]<=k) l=mid;
else r=mid-1;