目录
引言
二分可以简单分为 二分查找 和 二分算法,二分查找可能很多人都听过,今天想来讲讲二分答案
二分答案
使用场景
整数域上的二分
- left表示答案的左端点,一般是 0 或者 1
- right表示答案的右端点,这个就要根据题目来确定了
首先应该要确定二分的上界和下界,然后就是编写check函数:
当找到可行解的时候需要往右走找到最优解:
boolean check(){
}
ans = 表示不存在的值
left = 最小可能的值
right = 最大可能的值
while (left <= right) {
mid = left + right >> 1;
if (check(mid)){//若答案符合
ans = mid;//保存答案
left = mid + 1;
} else {
right = mid - 1;
}
}
当找到可行解的时候需要往左走找到最优解:
boolean check(){
}
ans = 表示不存在的值
left = 最小可能的值
right = 最大可能的值
while (left <= right) {
mid = left + right >> 1;
if (check(mid)){//若答案符合
ans = mid;//保存答案
right = mid - 1;
} else {
left = mid + 1;
}
}
网上有其他很多不同的版本,比如left<right的版本,我的评价是那样一旦写错很容易死循环,这个版本就会好很多。
实数域上的二分
采用 化为整数法