二分答案

二分答案

1.使用场景

二分答案一般使用在求解符合条件的最小值或者最大值上面,当我们遇到这两个问题的时候,一般都可以使用二分答案来解决问题。

2.什么是二分答案

二分答案就是通过对所有可能的答案区间进行折半查找,不断缩减范围,最终确定答案的方法。

3.求最小值

//求最小值
int getAnswer(int l, int r) {
	int mid;
	while(l < r) {
		mid = (r + l) / 2;
		if(check(mid)) {
			r = mid;
		}
		else {
			l = mid + 1;
		}
	}
}

我们可以知道,要求最小值,那么所满足条件的值赋值给右边界,不满足的值加一赋值给左边界,当l等于r或者l>r时,则说明已经查询到符合的最小值。

4.求最大值

int getAnswer(int l, int r) {
	int mid;
	while (l<r) {
		mid = (r + l + 1) / 2;
		if (check(mid)) {
			l = mid;
		}
		else {
			r = mid - 1;
		}
	}
}

同样,要求最大值,那么就需要舍弃符合条件的较小的值,即将左边界赋值符合条件的点,右边界赋值不符合条件的值减一。不断查询下去,则最后剩下符合条件最大值。其中mid = (r + l + 1) / 2是为了防止无限循环,因为当l=r+1时刚好符合条件,r+l/2=l,就会无限循环。

5. check函数构思

我们既然选择了使用二分法来求解,那么我们在check的时候,应该是在我们已知答案的情况下去确认答案,即不是从一般思考方向设想,而是验证。check函数往往是基于假定知道答案,来验证是否正确。

posted @   WhiteBlackCat  阅读(1296)  评论(1编辑  收藏  举报
编辑推荐:
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目
点击右上角即可分享
微信分享提示