题目中需要找最大值:
需要尽量向上靠拢,判定成功后提高下界,
int low = 0, high = max;
int ans = low;
while (high >= low)
{
int mid = (high + low) / 2;
if (Judge(mid))
{
ans = mid;
low = mid + 1;
}
else
{
high = mid - 1;
}
}
题目中需要找最小值:
需要尽量向下界靠拢,判定成功后降低上界
int low = 0, high = max;
int ans = high;
while (high >= low)
{
int mid = (high + low) / 2;
if (Judge(mid))
{
ans = mid;
high = mid - 1;
}
else
{
low = mid + 1
}
}
浮点数的穷举:
需要多定义一个精度常量,用在循环判断中
#defien e 1e-8
double ans = low;
while (high - low > e)
{
double mid = low + (high - low) / 2;
if (Judge(mid))
{
ans = mid;
high = mid;
}
else
{
low = mid;
}
}