c语言:二分法的完整补充

二分法|整数二分 vs 浮点数(小数)二分 总结

核心本质相同

都是不断缩小搜索区间,取中间值判断,舍弃一半不符合条件的区间。

差别在于循环终止条件、区间更新方式。

  1. 整数二分(找边界,最常用)

目标:在离散整数集合找满足条件的第一个/最后一个整数

  1. 循环条件: while(l < r)
  2. 分两类模板
  • 找左边界(满足条件的最小数)

plaintext

mid = l + (r - l) / 2;

if(check(mid)) r = mid;

else l = mid + 1;

  • 找右边界(满足条件的最大数)

plaintext

mid = l + (r - l + 1) / 2;

if(check(mid)) l = mid;

else r = mid - 1;

  1. 特点
  • 区间是离散的点,mid 一定是整数
  • 必须+1 / -1,不然死循环
  • 结束时 l == r ,就是答案
  1. 浮点数(小数)二分

目标:求连续区间内的一个近似值(平方根、方程解)

  1. 循环条件: while(r - l > eps)
    eps 是精度,比如 1e-6 、 1e-8
  2. 模板

plaintext

mid = (l + r) / 2;

if(check(mid)) r = mid;

else l = mid;

  1. 特点
  • 实数是连续的,没有整数那种"相邻断点"
  • mid 是小数,不用 +1、-1
  • 区间不断靠近,只要区间足够小就可以停止
  • 输出 l 或者 r 都可以,二者几乎相等
  • 有时候要补充一个1.0来让它变成浮点型

一句话对比速记

  • ✅ 整数二分:离散点,靠 l<r,需要加减1防死循环,求精确整数边界
  • ✅ 小数二分:连续区间,靠精度eps,不用加减,求近似值
相关推荐
一切皆是因缘际会1 小时前
掌控信息论:同源星际通信基础理论
人工智能·算法·ai
智鸟科技GemeOpen开发者智能设备1 小时前
MQTT智能通断器GSCW1M2P · 开发者实战指南
开发语言·物联网·智能家居
水饺编程1 小时前
第1章,[Win32 章节]:Windows 简史
c语言·c++·visual studio
青柠之夏cc2 小时前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
ym hyd 1112 小时前
题库建立与考试系统源码 Java+SpringBoot+Vue3 前后分离
java·开发语言·vue.js·spring boot·毕设
OKkankan2 小时前
Python 高阶语法(一):高阶函数、闭包、lambda 与 functools——从底层真正理解装饰器
开发语言·python
geovindu2 小时前
rust: Facade Pattern
开发语言·后端·设计模式·rust·外观模式
福大大架构师每日一题2 小时前
Rust 1.99.0发布:C 可变参数、裸函数、Cargo 配置、Rustdoc 性能与大量兼容性调整全解析
c语言·开发语言·rust
智鸟科技GemeOpen开发者智能设备2 小时前
平安校园 AI 智能实时告警系统 智鸟科技·GemeOpen + 谷华科技·融合创新方案白皮书
java·开发语言·python·物联网·智能家居