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,不用加减,求近似值
相关推荐
行思理13 分钟前
go语言学习难度及适合学习的人群
开发语言·学习·golang
wangchunyu1142 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
程序 代码狂人3 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
HDU-Dade3 小时前
【校招笔试真题】简要介绍 Self-Attention 的前沿算法
人工智能·算法
meiying88384 小时前
快递单号批量查询Python脚本:从手动到自动化的完整实现
开发语言·python·自动化
Zwawa4 小时前
编译器工具链:GCC、Clang、MSVC、ICC、armclang
c语言·嵌入式·编译器
@大迁世界5 小时前
告别 Go,拥抱 Rust
开发语言·golang·rust
SEO_juper5 小时前
Node.js 重定向链检测工具:301 跳了几跳、有没有成环,一次看清
xml·开发语言·python·node.js·json·bash
学逆向的5 小时前
C 指针常量与常量指针
c语言·开发语言·网络安全
水饺编程5 小时前
第2章:Linux 基础,exit 命令
linux·c语言·汇编