二分查找(binary search)求最值
二分法查找目标值
二分查找为人熟知的应用是在有序序列中查找目标元素。
// 当前位置取值
int value(int cur) {
}
// 在区间[b, e]中查找符合条件的元素
int binarySearch(int b, int e, int key)
{
while (b <= e) // [b, e]
{
int mid = (b + e) / 2;
if (value(mid) == key) // 查找成功, 直接返回目标元素位置
return mid;
else if (value(mid) < key) // [mid+1, e]
b = mid + 1;
else if (value(mid) > key) // [b, mid-1]
e = mid - 1;
}
return -1;
}
二分查找求变量的最值
前面这种方法是找到目标元素后就马上返回。二分查找还有一种应用是求变量的最大(小)取值,这时就需要二分搜索空间至搜索空间为空。
如果存在一个临界值,当变量取值