二分查找和二分答案模版
左闭右开
二分查找下界问题
二分答案找最大值最小(满足条件后尽量让答案往前走)
int middle;
while(left < right) {
middle = (left + right) >> 1;
if (check(middle)) {
right = middle;
} else {
left = middle + 1;
}
}
return left;
// 二分查找时, check替换为 arr[middle] >= val
左闭右开
二分查找上界问题
二分答案找最小值最大(满足条件后尽量让答案往后走)
int middle;
while(left < right) {
middle = (left + right + 1) >> 1;
if (check(middle)) {
left = middle;
} else {
right = middle - 1;
}
}
return left;
// 二分查找时, check替换为 arr[middle] <= val