首页 > 其他分享 >二分

二分

时间:2023-01-29 17:35:30浏览次数:38  
标签:二分 return int double mid check

二分思路

二分模板

整数二分

bool check(int x) {/* ... */} // 检查x是否满足某种性质

// 区间[l, r]被划分成[l, mid]和[mid + 1, r]时使用:
int bsearch_1(int l, int r)
{
    while (l < r)
    {
        int mid = l + r >> 1;
        if (check(mid)) r = mid;    // check()判断mid是否满足性质
        else l = mid + 1;
    }
    return l;
}
// 区间[l, r]被划分成[l, mid - 1]和[mid, r]时使用:
int bsearch_2(int l, int r)
{
    while (l < r)
    {
        int mid = l + r + 1 >> 1; //此处必须要+1,如果不+1那么当l=r-1时,mid向下取整结果为l,下一行if(ture)则l=mid=l ,将构成死循环
        if (check(mid)) l = mid;
        else r = mid - 1;
    }
    return l;
}

浮点数二分

bool check(double x) {/* ... */} // 检查x是否满足某种性质

double bsearch_3(double l, double r)
{
    const double eps = 1e-6;   // eps 表示精度,取决于题目对精度的要求
    while (r - l > eps)
    {
        double mid = (l + r) / 2;
        if (check(mid)) r = mid;
        else l = mid;
    }
    return l;
}

标签:二分,return,int,double,mid,check
From: https://www.cnblogs.com/wustRen/p/17073282.html

相关文章

  • 二分查询
    话不多说直接上代码(Coding):/***二分查找*二分查找是一种算法在一个有序的元素列表中查询一个元素如果存在则返回该元素的索引没有则返回null*比一般查询......
  • LeetCode | 704. 二分查找
    ​题:力扣704.二分查找给定一个 n 个元素有序的(升序)整型数组 nums和一个目标值 target ,写一个函数搜索 nums 中的target,如果目标值存在返回下标,否则返回-1......
  • 二分查找
    二分查找的列表必须是有序列表。从列表中间开始查找,如果给定的值和中间值相等则查找成功;如果给定的值大于或者小于中间的值,则从表中大于或者小于中间值的那一半中查找,......
  • 二分图
    约定如无特别说明,本文中的\(n,m\)分别为左右部点数,且总有\(n\leqslantm\)。边集记为\(E\),边数记为\(e\)。定义二分图是如下的一张图:可以将\(V\)划分为\(......
  • 求三次方根二分查找
    直接写#include<iostream>#include<cmath>#include<iomanip>usingnamespacestd;doublen;intmain(){boolsign;cin>>n;doublel=-10000,r=100......
  • 二分查找的三种形式&两道力扣
    前言过年前刷Leetcode的时候遇到这样一道题目:354.俄罗斯套娃信封问题-力扣(Leetcode)其中使用patiencesorting这个算法的做法中,因为牌堆顶是有序数组,所以可以使用二分......
  • 代码随想录 | Day 1 | LC 27 移除元素、704 二分查找
    704.二分查找题目解法1:纯遍历classSolution{publicintsearch(int[]nums,inttarget){for(inti=0;i<nums.length;i++){i......
  • 704.二分查找
    题目:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。*要求输入:nums=[-1,0,......
  • 基于matlab的二分法求解方程的根(Bisection method)
    ​​https://zhuanlan.zhihu.com/p/139961663​​​​http://www.zhihuishi.com/source/15627.html​​......
  • 【题解】P5787 二分图 /【模板】线段树分治
    概念线段树分治是一种用于维护时间轴等的离线算法,本质上是通过维护时间轴的连续区间得到某一时刻的状态。时间复杂度和普通线段树相同,空间复杂度为\(O(n\logn)\)例题......