先来看看整数二分嘻嘻,我今天做出来一道简单的二分题,跟着自己的思路写题还是挺有意思的
我是怎么想的呢,
如果拿到一道题,首先我们应该要看出来二分的思想,不然怎么二分??qwq,
整数二分,先找到确定可能的答案区间,就是我要找的那个答案肯定在这个区间里,然后根据题目的条件,判断中值是否满足题意,不管满不满足我最后都能丢掉一半的区间,进一步逼近答案,最后得到答案,让我们来看看模板吧!
bool check(int mid)
{
if (满足题意)
return true;
else
return false;
}
int bsearch(int left, int right)
{
while (left < right)
{
int mid = (left + right) / 2;
if (check(mid))
right = mid - 1;
else
left = mid;
}
return left;
}
注意整数二分很容易出现死循环,那我们应该怎样做呢,
就是加上0.5上取整,
还有关于left和right值的更新问题,一定要根据题目意思自己分析一下就阔以了
接着聊聊实数二分??
是这样的,二者并没有实质的差别,通常是我习惯循环100次来达到题目的精度要求,不循环也没事,开一个eps极小量也可以;
看看模板是怎样的;
bool check(double mid)
{
if (满足题意)
return true;
else
return false;
}
double bsearch(double left, double right)
{
for (int i = 0; i < 100; i++)
{
mid = (left + right) / 2;
if (check(mid))
left = mid;
else
right = mid;
}
return mid;
}
感觉还是有点不一样的嘛!!好了我去午睡了