BinarySearch
说明:
BinarySearch中文又叫做二分查找,这是一种查找类的算法,但是其使用是有一定的限制的,那就是必须要区间类必须要满足相应的单调性,不然的话是无法使用的。
Java代码模板:
整形二分(左闭右闭):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public static void binarySearch(){ int l=0,r=100,mid; while(l<=r){ mid = (l+r)>>1; if(check(Object c)) l = mid+1; else r = mid-1; } }
public static void check(Object c){ }
|
整形二分(左闭右开):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public static void binarySearch(){ int l=0,r=100,mid; while(l<r){ mid = (l+r)>>1; if(check(Object c)) l = mid+1; else r = mid; } }
public static void check(Object c){ }
|
整形二分(左开右闭):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public static void binarySearch(){ int l=0,r=100,mid; while(l<r){ mid = (l+r+1)>>1; if(check(Object c)) l = mid; else r = mid-1; } }
public static void check(Object c){ }
|
高精度二分:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| public static void BianrySearch(){ double l = 0,r=1e11,mid; while(r-l>1e-5) { mid = (l+r)/2.0; if(check(Object o)) l = mid; else r =mid; } }
public static void check(){ }
|
C++代码模板
整形二分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| #include<iostream>
using namespace std;
int main(){ int l = 0,r = 10000,mid=0; while(l<r){ mid = (r+l+1)>>1; if(check(mid)) l = mid; else r = mid-1; } return 0; }
bool check(int mid){ ... return false; }
|