【二分模板】

二分模板

二分本质:寻找问题的边界 在[L, R]区间定义某种性质,可以将区间分为两个部分,左边是不满足该性质,右边满足该性质

在这里插入图片描述

//寻找绿色边界点
//区间分为[l, mid] 和 [mid + 1, r]  
int l = 0, r = n - 1;
while (l < r) {  
    int mid = (l + r) >> 1; // 由于mid在左边边区间所以不用+1
    if (check(mid)) {//为true代表mid在绿色区间
        r = mid; //缩小区间到[l, mid]
    } else l = mid + 1; //为false 代表mid在红色区间,缩小区间到[mid+1, r]
}
//循环结束后 r位于红色边界点上


//寻找红色边界点
//区间分为[l, mid - 1] 和 [mid, r]  
int l = 0, r = n - 1;
while (l < r) {  /
    int mid = (l + r + 1) >> 1; // 由于mid在右边区间所以要+1
    if (check(mid)) {//为true代表mid在红色区间
        l = mid; //缩小区间到[mid, r]
    } else r = mid - 1; //为false 代表mid在绿色区间,缩小区间到[l, mid-1]
}
//循环结束后 r位于红色边界点上

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值