整数二分算法代码模板与边界分析

这篇博客详细介绍了二分算法,包括两种不同的代码模板,适用于不同情况。作者强调了在面试或竞赛中理解并记住这些模板的重要性,特别是处理边界问题。文中还通过具体的例子解释了为何在某些情况下计算mid时需要加1,以避免死循环。

二分算法

二分算法的代码和思想都比较简单,但是在做题时很容易出现边界问题 ,为了在面试或者竞赛时遇到二分类的题目能快速解答,建议将这两个模板理解并背下来。

此代码模板来自Acwing Y总(闫学灿)

二分模板有两个 ,分别适用于不同的情况。
二分算法的思路:假设目标值在闭区间[ l , r ]中,每次去区间中点 mid=( l + r ) / 2将区间长度缩小一半 ,当区间中只有一个数时就找到了目标值

img

下面将介绍两种不同的区间划分方式对应不同的情况

模板1

将区间[l,r]划分成 [l,mid][mid+1,r]时 ,其更新操作是 r = mid或者 l=mid +1计算 mid 时候不需要加1

Java代码模板

public int bsearch(int [] arr ,int l,int r ){
   
   
  while(l < r){
   
   
    //分解子问题 这是二分的核心 --范围减半
    int mid = l + r >> 1;
    if (check(mid)) r = mid;  //向左边找
    else l = mid + 1;			//向右边找
  }
  return l ;
  
}

模板2

将区间[l,r]划分成[l,mid-1][mid,r]时,其更新策略为 r=mid-1或者 l=mid

此时为了防止程序进入死循环 ,计算mid时需要+1

这里解释一下为什么要+1

r = l + 1时将会进入死循环 如 数组 [1,2,3]三个数的下标分别为0 , 1 , 2计算mid = (0+2)/2 = 1 代码进入死循环

Java 代码模板

public int bsearch(</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值