二分算法

来源:互联网 发布:aim 霹雳 知乎 编辑:程序博客网 时间:2024/05/01 03:14

介绍

  1. 在一个单调(递增或递减)的区间[a1,an]中查找元素x,每次将区间分为左右长 度相等的两部分,判断解在哪个区间中并调整区间上下界,重复直至找到x。
  2. 复杂度O(lg n)
  3. 作用:查找元素是否存在(找出位置或值)求满足条件的最值。

算法原理

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;
原创粉丝点击