首页 > 其他分享 >二分模板

二分模板

时间:2023-10-18 14:35:28浏览次数:40  
标签:二分 满足条件 int mid while main 模板

二分答案的写法有很多模板,但使用的情况各不相同
前两种模板:都是 while(l < r),但是会有区别的,区别在代码注释中有体现。

后两种模板:都是 while(l <= r), 也是在返回上有区别。

这是最大值最小


int main()
{
	int l;
	int r;
	while(l < r)
	{
		int mid = (l + r)/ 2;
		if(check())
		{
			r = mid;  // 这里是 r = mid, 说明[l,mid]是合法范围
		}
		else
		{
			l = mid + 1;   //  [l,mid]这个范围都不是合法范围,所以下一次查找直接从 l = mid + 1开始了
		}
		//最后的l,r是答案 因为 l == r ,最终就是答案。
	} 		

}

这是最小值最大

int main()
{
	int l;
	int r;
	while(l < r)
	{
		int mid = (l + r + 1)/ 2;  // 这里要 l + r +1 要不然会死循环
		if(check())
		{
			l = mid;         // mid这个位置 满足条件之后 查找 [mid , right]的位置, 所以l移到mid的位置
		}
		else
		{
			r = mid - 1;     // [mid,r] 不满足条件, 所以要移到满足条件的一方, r = mid - 1 
		}
	} 
	//最后的l,r是答案 因为 l == r


}

找最值都可以:

  1. 找最小值返回 r
int main()
{
	int l;
	int r;
	while(l <= r)
	{
		int mid = (l + r )/ 2;  
		if(check())
		{
			l = mid - 1;
		}
		else
		{
			r = mid + 1;
		}
	} 
	//最终 l == r + 1, 找最小值返回r,返回r位置

}
  1. 找最大值最终返回 l

中间保留保存最佳值


int main()
{
	int l;
	int r;
	while(l <= r)
	{
		int mid = (l + r )/ 2;  
		if(check())
		{
			ans = mid;  // 这里需要保证 check()函数是找最佳值的位置的。
						//  这个位置已经满足一个位置了,再往mid - 1位置找看是否还有更佳位置
			l = mid - 1;
		}
		else
		{
			r = mid + 1;
		}
} 
	//答案是ans  
}

标签:二分,满足条件,int,mid,while,main,模板
From: https://www.cnblogs.com/IOIAKmerlin/p/17772257.html

相关文章

  • 一点模板
    线性素数筛:欧拉筛:定义数组prim[i]表示第i大的素数,isprim[i]表示i是否为素数(是否被筛过)从2~n遍历,if(!isprim[i])prim[++cnt]=i,如果遍历到i时i仍未被筛,则将i记录于prim数组中。接下来开始以i为基数筛除素数,我们发现:所有的合数都能被筛分割为若干数的积。所以无论i是否为......
  • Thymeleaf 模板引擎
    Thymeleaf简介Thymeleaf(https://www.thymeleaf.org/Thymeleaf3.0.15)是一个XML/XHTML/HTML5模板引擎,可用于Web与非Web环境中的应用开发。它是一个开源的Java库,基于ApacheLicense2.0许可。Thymeleaf提供了一个用于整合SpringMVC的可选模块,在应用开发中,你可以使用Thymeleaf......
  • 考前模板整理
    有用的板子常用技巧inlinellread(){ llx=0,w=1; charch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') w=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ x=(x......
  • laravel 中layout模板
    Blade布局是指具有多个公共部分的布局,可以在整个应用程序中使用,无需为此加载多个文件。公共区域包括页眉、页脚、侧边栏等。它包括Blade语法。我们也使用相同的文件夹结构/resources/views来存储布局。让我们创建一个简单的基本Blade布局。在/resources/views/layouts/app.blade.p......
  • 人工智能结合模板实现表格信息提取
    人工智能结合模板实现表格信息提取一、项目介绍本项目基于是OCR(文本识别)、表格识别的人工智能技术应用,通过表格识别,实现快速制作模板;模板单元格信息,结合OCR识别结果,将表格内容提取为结构化信息输出。与KIE(KeyInformationExtraction,关键信息抽取)模型对比,本项目准确率更高,效率......
  • C语言二分法
    ////main.c//BinarySearch////Createdbystevexiaohuzhaoon2023/10/16.//#include<stdio.h>//二分法查找指定元素在数组中出现的索引位置intBinarySearch(int*array,intlength,intk){intleft,right,mid,NotFound=-1;//设置......
  • Windows Server 2016 OVF, updated Oct 2023 (sysin) - VMware 虚拟机模板
    WindowsServer2016OVF,updatedOct2023(sysin)-VMware虚拟机模板2023年10月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2016-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现在......
  • Windows Server 2019 OVF, updated Oct 2023 (sysin) - VMware 虚拟机模板
    WindowsServer2019OVF,updatedOct2023(sysin)-VMware虚拟机模板2023年10月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2019-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgWind......
  • Modbus主机模板
    #ifndefMODBUS_MASTER_H#defineMODBUS_MASTER_H#include"main.h"#ifdefMODBUS_MASTER_C#include"stm32f10x_usart.h"#include"crc.h"#definePrioritySize3#defineMissionSize10#defineBps115200#defineRecSize......
  • React-Admin后台管理模板|react18+arco+zustand后台解决方案
    基于react18.x+vite4+arco-design自研中后台管理系统解决方案ReactAdmin。react-vite-admin基于vite4搭建react18.x后台管理项目。使用了react18hooks+arco.design+zustand+bizcharts等技术实现权限管理模板框架。支持暗黑/亮色主题、i18n国际化、动态权限鉴定、3种布局模板、t......