二分详解——学习笔记
首先,使用二分有几个前提:
-
具有单调性
-
要求“最小的最大”或“最大的最小”
其次,还要分清楚二分查找与二分答案的区别:
-
二分查找:在某区间使用二分的思想进行查找
-
二分答案:在答案的区间中使用二分的思想并判断从而找到最优解
同时还要处理好二分的边界。
接下来来理解一下二分法的思想
每次都有一个左端点
然后来看一下模版代码
先说明一下,
是位运算,意思是把 在二进制下右移 位,即 ,左移 位则是 ,即 ,这样会比直接使用 的效率更快,快读中的 也是同样的道理。
- 使找到的答案尽可能靠左(即在一个升序排列中要求“最小的最大”)
python
while l<r:
mid=(l+r)>>1 #or (l+r)//2
if check(mid): #check 应为判断函数,并且应该返回一个布尔值
r=mid
else:
l=mid+1
c++
while(l<r){
int mid=(l+r)>>1; //or (l+r)/2
if(check(mid)) r=mid; //check 应为判断函数,并且应该返回一个布尔值
else l=mid+1;
}
- 使找到的答案尽可能靠右(即在一个升序排列中要求“最大的最小”)
python
while l<r:
mid=(l+r+1)>>1 #or (l+r+1)//2
if check(mid): #check 应为判断函数,并且应该返回一个布尔值
l=mid
else:
r=mid-1
c++
while(l<r){
int mid=(l+r+1)>>1; //or (l+r+1)/2
if(check(mid)) l=mid; //check 应为判断函数,并且应该返回一个布尔值
else r=mid-1;
}
接下来是二分答案
什么时候需要二分答案?
答案在一个很大的区间中,暴力会超时,这时就要使用二分答案了。
那怎么做呢?
首先要确定好初始范围,然后根据题意写一个
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】