当前位置: 首页 > news >正文

二分算法

原理

每次都将待查找区间缩小一半,通过比较目标值与区间中间元素的大小,来确定下一步在左半区间还是右半区间继续查找,直到找到目标元素或确定目标元素不存在。

整数二分

通过数据规律对比中间值和目标值的对应关系确定二分边界的更新方式,使用对应的二分算法求解问题。

int bsearch_1(int l,int r)
{while(l<r){int mid=l+r>>1;if(check(mid)) r=mid;else l=mid+1;}return l;
}
int bsearch_2(int l,int r)
{while(l<r){int mid=l+r+1>>1;if(check(mid)) l=mid;else r=mid-1;}return l;
}

  向下取整,如果r=l-1,会产生l=mid死循环的边界问题,因此确定mid时补上加一。

浮点数二分
//求根
#include<iostream> using namespace std;int main()
{double x;cin>>x;double l=0,r=x;while(r-l>=1e-6){double mid=(l+r)/2;if(mid*mid>x) r=mid;else l=mid;}printf("%f\n",l);}

http://www.lqws.cn/news/188155.html

相关文章:

  • 【免杀】C2免杀技术(十六)反沙箱/反调试
  • 【Linux】sed 命令详解及使用样例:流式文本编辑器
  • LLMControlsArm开源程序是DeepSeek 控制熊猫机械臂
  • react public/index.html文件使用env里面的变量
  • for(;;) 和while(1) 的无限循环用法对比,优缺点说明
  • Gerrit+repo管理git仓库,如果本地有新分支不能执行repo sync来同步远程所有修改,会报错
  • 【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
  • (nice!!!)(LeetCode每日一题)2434. 使用机器人打印字典序最小的字符串(贪心+栈)
  • 如何防止误删除rm (万恶之源)
  • 第二十九章 读写内部FLASH
  • 国产PC系统
  • S5P6818_驱动篇(24)UART驱动
  • 通过中脑刺激相关神经回路的纤维微解剖建立连接性
  • JavaSec-SPEL - 表达式注入
  • 山东大学《数据可视化》期末复习宝典
  • 怎么让大语言模型(LLMs)自动生成和优化提示词:APE
  • 在Markdown中使用MathType插入公式
  • next,react封装axios,http请求
  • Webhook 配置备忘
  • 浏览器工作原理06 [#]渲染流程(下):HTML、CSS和JavaScript是如何变成页面的
  • 基于Selenium+Python的web自动化测试框架
  • C++.OpenGL (3/64)着色器(Shader)深入
  • ceph 脚本,用于计算 rbd 文件存放 OSD 方法
  • 在UI界面内修改了对象名,在#include “ui_mainwindow.h“没更新
  • MySQL 索引优化(Explain执行计划) 详细讲解
  • 阿里140 补环境日志
  • JS-- for...in和for...of
  • IDEA 中 Undo Commit,Revert Commit,Drop Commit区别
  • 从微积分到集合论(1630-1910)(历史简介)——第4章——现代积分理论的起源(Thomas Hawkins)
  • Python | Windows11通过离线方式安装pyserial