二分模板(实数二分和整数二分)

先来看看整数二分嘻嘻,我今天做出来一道简单的二分题,跟着自己的思路写题还是挺有意思的
我是怎么想的呢,
如果拿到一道题,首先我们应该要看出来二分的思想,不然怎么二分??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;
}

感觉还是有点不一样的嘛!!好了我去午睡了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值