二分

本文详细介绍了二分搜索算法,包括其使用场景、算法分析和常见变种。讨论了如何在整数和浮点数中应用二分法,并通过两个例题——acwing1221. 四平方和和acwing1236. 递增三元组,展示了二分法在解决实际问题中的应用。
摘要由CSDN通过智能技术生成

二分

1. 算法分析

使用场景
使用二分需要满足单调性和连续性。
二分法常常用于:

  1. 题目有找最大/小的答案的字眼,这种情况直接枚举答案
  2. 计算出复杂度差不多是O(nlogn)时,考虑二分法

边界问题

  1. l和r的取法:l取可能取到值的左边界,r取可能取到值的有边界
  2. 判断是否找到答案:判断sum[l]和target的关系,如果相等,找到答案;不相等,找不到答案。
  3. 如果在while循环内找到答案怎么处理:答案的那个等于符号放到if()里面,因为判断到答案的时候r = mid 或 l = mid。

2. 板子

2.1 整数二分

2.1.1 找大于某个数的最小值
int bsearch_1(int l, int r) {
   
    while (l < r) {
   
        int mid = (l + r) >> 1;  // 区别:有无加1
        if (check(mid)) r = mid;  //区别
        else l = mid + 1;  //区别
    }
    return l;
}
2.1.2 找小于某个数的最大值
int bsearch_2(int l, int r) {
   
    while (l < r) {
   
        int mid = (l + r + 1) >> 1;  // 区别:有无加1
        if (check(mid)) l = mid;  //区别
        else r = mid - 1;  //区别
    }
    return l;
}

2.2 浮点数二分

double bin_search(double l, double r) {
   
    while (r - l > 1e-8) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值