二分

“中分”(二分)算法(二分查找and二分答案) 这种方法要求满足条件的答案是单调有序的,其基本思想是在答案可能的范围([L,R])内二分查找答案,不断检查当前答案是否满足题目的要求,根据检查结果更新查找的区间,最终取得最符合题目要求的答案进行输出。二分搜索算法的应用不仅限于精确匹配查找,‌还可以扩展到计算一个值的排名(‌比它更小的元素的数量)‌、‌前趋(‌下一个最小元素)‌、‌后继(‌下一个最大元素)‌以及最近邻等。像这题我们就可以从5开始搜,如果砍的数量比需要的木材还多,就往大了搜,如果砍的数量比需要的木材多,那就往下的搜,直到找到合适的答案。 阅读详情

1、二分查找

算法笔记 P127

//无重复
//单增

int binarySearch(int a[],int left,int right,int x)
{
	int mid;  //在外面建一个变量,省得每次重新创建了。 
	while(left<=right)
	{
		mid=(left+right)/2;
		if(a[mid]==x) return mid;
		else if(a[mid]<x) left=mid+1;//left++;又写错了 //binarySearch(a,mid+1,right,x);写错了 
		else right=mid-1;//right--;同上  //binarySearch(a,left,mid-1,x); 写错了		
	}
	return -1;
}

2、查找下界

a单增,求第一个大于等于x的元素的位置。

没有的话,返回它应该在的位置。 

 算法笔记 P128

二分的初始区间为:left=0,right=n。 

int low_bound(int a[],int left,int right,int x)
{
	int mid;
	while(left<right)  //left==right时循环结束! 
	{
		mid=(left+right)/2;
		if(a[mid]=x) right=mid;
		else if(a[mid]<x) left=mid+1;
		else right=mid;		
	}
	return left;  //return mid; 错了
} 

3、查找上界

a单增,求第一个大于x的元素的位置。

没有的话,返回它应该在的位置。 

 算法笔记 P129

int upper_bound(int a[],int left,int right,int x)
{
	int mid;
	while(left<right)
	{
		mid=(left+right)/2;
		if(a[mid]>x) right=mid;
		else left=mid+1;
	}
	return left;
}

4、求√2 的近似值

double calSqrt()
{
	double left=1;
	double right=2;
	double mid;
	while((right-left)>1e-5)
	{
		mid=(right+left)/2;
		if(mid*mid>2) right=mid  //left=mid;  写错了 
		else  left=mid;  //right=mid;  写错了 
	}
	return mid;
}

5、求 f(x)=0 的近似解

//f(x)单增,求f(x)=0的根 
double solve(double L,double R)
{
	double left=L;
	double right=R;
	double mid;
	while((right-left)>1e-5)
	{
		mid=(right-left)/2;
		if(f(x)>0) right=mid;
		else left=mid;
	}
	return mid;	
} 

6、装水问题 --- 二分

#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;

const double pi=acos(-1.0);
const double eps=1e-5;

double f(double R,double h)
{
	double alpha=2*acos((R-h)/h);
	double L=2*sqrt(R*R-(R-h)*(R-h));
	double S1=alpha*R*R/2-L*(R-h)/2;
	double S2=pi*R*R/2;
	return S1/S2;	
}

double solve(double R,double r)
{
	double left=0,right=R,mid;
	while(right-left>eps)   //- 比 > 优先级更高
	{
		mid=(right+left)/2;
		if(f(R,mid)>r) right=mid;
		else left=mid;
	}
	return mid;
}

int main()
{
	double R,r;
	cin>>R>>r;
	printf("%.4f\n",solve(R,r));
	return 0;	
}

7、木棒切割问题

见文章:https://zhuanlan.zhihu.com/p/55024297

 

 

 

 

【有营养的算法笔记】基础算法 —— 整数二分与浮点二分 整数二分两种模板、浮点二分模板以及对于每种模板的应用 阅读详情

相关推荐

欧拉 openEuler 20.03安装配置tigervnc-server

欧拉 openEuler 20.03安装配置tigervnc-server openEuler VNC

郭亚望 8955

【二分查找】模板+例题

二分查找 模板 例题

awww224112的博客 2501

Anaconda启动失败,一直在loading application的问题

实战基础新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本

Tristan的博客 2771

一篇文章带你学会二分(二分查找、二分答案)

众所周知,二分法是一个非常重要的算法,它可以在某些情况中代替遍历,使我们的时间 复杂度降低。二分法分为二分查找和二分答案,他们分别应用于不同的场景,其基本思想 是对于某个已知左端点和右端点的区间进行二分,以此达到最终效果。时间复杂度为O(log n)。

Wind_Breaker37的博客 2325

MediaCreationToolW11:Windows11系统升级与修复利器

在日常使用Windows11系统的过程中,我们可能会遇到一些棘手的问题,比如系统更新时出现异常导致无法成功更新,或者系统本身出现异常需要进行无损修复。此外,当我们的电脑尚未升级到Windows11,而我们又希望进行升级时,一款高效且可靠的工具就显得尤为重要。接下来,MediaCreationToolW11将开始下载Windows11的安装文件,并创建Windows11介质。在“选择你要执行的操作”界面中,选择“ISO文件”。此时,你可以使用你的账户登录系统,并开始使用全新的Windows11系统了。

nntxthml的博客 2409

一体化伺服电机与施耐德PLC TM241CEC24T在Canopen协议下的应用

一.硬件组成 软件组成:施耐德SoMachineV4.3二.○1.打开SoMachineV4.3,点击“新建项目”○2.点击“空白项目”○3.项目命名○4.点击“创建项目” 三. 点击“Logic Builder” 四. ○1.右击项目”PMM_CANOPEN_ST”添加设备○2.点击”LogicController”选择PLC型号TM241CEC24T/U○3.点击“添加设备” 五. ○1.右击CAN_1,添加设备○2.选择“CANopen Perfomance”○3.点击“添加设备”

m0_46512607的博客 2521

二分查找

二分查找算法(JAVA) 1.二分查找又称折半查找,它是一种效率较高的查找方法。2.二分查找要求:(1)必须采用顺序存储结构 (2).必须按关键字大小有序排列3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值则在中值前 面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次是一个递归过程,将前半部分或者后

u014732103的博客 243

拥有AI助手便能解放双手?——抖音直播脚本的生成

科技改变生活,AI助手帮你完成抖音创作!

Scientist_的博客 2353

二分查找 & 二分答案 万字详解,超多例题,带你学透二分。

很多人对二分很困惑,可能二分的边界很难掌握,也许是判断条件难写... 很幸运,你找到了这篇文章,仔细看下去,这篇文章将带你**学透二分**!!!

Mr_dimple的博客 10万+

华为OD机试真题 新系统 2026-04-26 Python&JS 实现【项目模块依赖构建顺序规划】

某公司正在开发一个大型软件系统,系统包含 N 个模块,每个模块之间存在构建依赖关系。例如,模块 A 可能依赖于模块 B,这意味着必须先构建模块 B,才能构建模块 A。 请根据依赖关系,输出所有可能的模块构建顺序(按照构建顺序排列模块名称),要求:

MISAYAONE的博客 405

QT应用编程: 基于UDP协议设计的大文件传输软件

一、环境介绍 QT版本: 5.12.6 编译器: MinGW 32 传输协议: UDP 功能介绍:软件由客户端和服务器组成,客户端通过 UDP协议不断循环地向服务端发送文件,文件传输速率可以达到10MB/s以上,文件传输后支持自动删除,客户端上可以支持每分钟创建一个文件并以时间戳命名,每个生成的文件可以设置大小,默认大小为6GB; 服务端收到文件之后,将文件进行存储到本地,可以指定时间自动删除文件;服务端可以动态计算传输速率,并写入日志文件; 服务器可以支持同时接收多个客户端的文件上传。...

2804

【算法笔记】二分查找 && 二分答案 (超详细解析,一篇让你搞懂二分)

二分查找应该算是是很多人入门的第一个算法吧,无论是ACM还是蓝桥杯都是必学的算法,很多人都觉得其非常简单,但它真的那么简单吗?Knuth 大佬(发明 KMP 算法的那位)曾说过:(思路很简单,细节是魔鬼)本文将为大家详细讲解二分查找的原理和使用场景并且,我们就是要深入细节,我将从while循环中该不该带mid该不该+1等地方分析这些细节的差异及出现差异的原因,保证你能灵活准确的写出二分查找算法。二分查找,也称为折半查找(Binary Search),是一种在有序数组中查找特定元素的搜索算法。

2302_79577794的博客 2万+

手把手教你学simulink(26.8)--控制算法场景示例:基于强化学习的无人机姿态稳定控制系统

首先,我们需要定义无人机的姿态稳定控制环境。环境包括无人机的状态(姿态角、角速度等)和动作(电机转速)。我们还需要定义奖励函数,用于评估控制器的表现。matlab深色版本% 定义环境% 定义状态空间% 12个状态变量% 定义动作空间% 电机转速范围奖励函数用于评估控制器的表现。我们可以根据无人机的姿态误差、角速度误差以及控制输入的变化率来设计奖励函数。具体来说,当无人机的姿态接近设定值时,给予正奖励;当姿态误差较大或控制输入变化剧烈时,给予负奖励。matlab深色版本。

MHD0815的博客 496

C++ | 二分查找(重点二分答案)

常见的二分类型:1. 整数二分2. 小数二分(相对较少)3. 二分答案(最常见)最直接的就是用O(logn)的时间,枚举时间较慢O(n)。小数二分与整数二分的思想相一致,就不在赘述了。

lly18435759909的博客 2306

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

二分法(整数二分/实数二分,二分答案/二分查找)

也就是在单调递增序列中。

wyqxii的博客 4420

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

整数二分

整数二分需要处理很多边界问题,如果处理不好很可能会出现死循环 整数二分有两个模板,分别适用于不同的情况 二分的本质: 如果有单调性一定可以二分,但是可以二分的题目不一定非得有单调性(没有单调性,也有可能可以二分),二分的本质并不是单调性,单调性和二分没有直接的关系 单调性:如果想找一个中间值的话,如果这个点小的话,答案一定在右半边,这个点如果大的话,答案一定在左半边 二分的本质是边界: 假设给定我们一个区间,我们在这个区间上定义了某种性质:使得这个性质在右半边区间是满足的,在左半边区间是不满足

weixin_60569662的博客 2594

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

二分(整数二分&浮点数二分)

两种模板其实记忆方法也很简单,首先都设置变量int mid = l + r >> 1,接着,根据 if 判断后,自己分析并写出 l / r 的改变,假如有 - 1,则mid = l + r >> 1要再 + 1,即改为 mid = l + r + 1 >> 1;故这两个整数二分的模板都一定会产生结果,但是产生的结果并不一定是正确结果,需要进行判断结果是否满足题意,否则为错误结果,即该题无解。总之,要比保留的小数多2。(没有单调性,也有可能可以二分),二分的本质并不是单调性,单调性和二分没有直接的关系。

m0_74381212的博客 1966

二分查找之红蓝二分查找

/ 目标值在左半部分} else {left = mid;// 目标值在右半部分left : -1;// 返回最后一个满足条件的值的索引。

xiaoxie8023的博客 2329

【基础算法】二分(二分查找 + 二分答案)

二分查找 + 二分答案

2401_87820834的博客 1304

C++算法-----二分查找,二分答案(内含整数二分,浮点数二分模板)

‌:二分答案是一种将二分查找思想应用于求解‌。

2502_91546000的博客 1997

二分模版(整数二分和小数二分)

整数二分

shallrelow的博客 1816

二分查找及二分答案

二分思想 二分是一种常用且非常精妙的算法,常常是我们解答问题的突破口,二分的基本用途是在单调序列或单调函数中做查找操作,因此当问题的答案具有单调性时,就可以通过二分把求解转化为判定(根据复杂度理论,可知判定的难度小于求解),这使得二分的应用范围变得很广泛。 二分的关键是边界,而不是单调性,所以,小白学习二分一定要注意边界问题。 线性查找需要从头开始不断地按顺序检查数据,因此在数据量大且目标数据靠后,或者目标数据不存在时,比较的次数就会更多,也更为耗时。若数据量为 n,线性查找的时间复杂度便为 O(

信息学奥赛学案 2531

【算法学习】二分查找与二分答案

二分可以简单分为二分查找与二分答案。:在一个有序的数组中进行搜索,时间复杂度为O(nlogn)。:在答案的一个范围内进行二分搜索。

Delicacy__的博客 1873
上一篇: 区间不相交问题
下一篇: 快速幂
Estrellas_
博客等级 码龄9年 273粉丝 233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值