蓝桥杯:二分法

一、整数二分步骤

1.找一个区间[L,R],使得答案一定在该区间中

2.找一个判断条件,使得该判断条件具有二段性,并且答案一定是该二段性的分界点

感悟:若数组中每个数都不一样,则两种模板皆可;

           若是其他情况,则根据判断条件确定是哪一种模板

备注:二段性包括单调性,也就是说区间是单调的即可找到具有二段性的条件

3.分析终点M在该判断条件下是否成立,如果成立,考虑答案在哪个区间并更新区间;如果不成立,考虑答案在哪个区间并更新区间

4.如果更新方式写的是R=Mid,则不用做任何处理;如果更新方式写的L=Mid,则需要在计算Mid时加上1

二、整数二分的两类模板

1.第一类 :答案在色区间的端点

将[L,R]分成[L,M-1] [M,R]

while(L<R)//整数二分结束条件为L=R

{

M=(L+R+1)/2;   原因:假如L=R-1,在M=(L+R)/2的情况下,M=L,若符合M是红色,就一直死循环

if(判断条件/M在红色范围内) L=M

else R=M-1;

}

2.第二类;答案是绿色区间的端点

将[L,R]分成[L,M],[M+1,R]

while(L<R)

{

M=(L+R)/2;

if(判断条件/M在绿色区间) R=M;

else L=M+1;

}

三、实数二分

 将区间[L,R]划分为[L,M]

while(R-L>...)//实数二分结束的条件为区间长度小于某个很小的数

{

double M=(L+R)/2;

if(判断条件) L=M;

else R=M;

}

四、整数二分与实数二分比较

1.整数二分的区间是离散的,实数二分的区间是连续的

2.整数二分可能会出现死循环,实数二分不会出现死循环

3.整数二分更新区间时,l或r更新的不同

 实数二分更新区间时,l或r都更新为mid

五、时间复杂度

O(log n)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值