首页 > 其他分享 >二分查找

二分查找

时间:2022-10-07 23:06:17浏览次数:45  
标签:二分 边界 double mid 查找 区间 循环

整数二分

右边界

二分查找_i++

如图:x为所需的边界,绿色范围为满足的区域,红色范围为不满足的区域

如何一直二分找到x呢

先设置一个mid=(l+r)/2;

判断一下mid是否符合要求;

如果结果符合,mid在x的左半边;调整区间为[mid,r],//l=mid

反之,调整区间为[l,mid-1];//r=mid-1;

如此循环下去直到l==r,此时x==l==r;

但需注意寻找右边界时容易碰到死循环。

例如当l=r-1,结果刚好符合时,此时mid=l,如此一直循环下去。所以

我们一般改为mid=(r+l+1)/2;

这时找到的为最右边的那个边界

左边界

二分查找_死循环_02

如图:

先设置一个mid=(l+r)/2;

判断一下mid是否符合要求;

如果结果符合,mid在x的右半边;调整区间为[l,mid];//r=mid;

反之,调整区间为[mid+1,r];//l=mid+1;

如此循环下去直到l==r,此时找到的为最左边的边界

实数二分

第一种当r-l<1e-6时,认为找到了目标值

//根据题目的要求,一般要比题目的精度大二位

eg:求一个数的开方

double x;

scanf("%d",&x);

double l=0,r=x;

while(r-l>1e-6)

{double mid=r+l>>1;

if(mid*mid>=x)r=mid;

}


第二种通过循环迭荡,一直在某个数的范围减小间隔。

for(int i=0 ;i<100;i++)

{

double mid=r+l>>1;

if(mid*mid>=x) r=mid;

}

标签:二分,边界,double,mid,查找,区间,循环
From: https://blog.51cto.com/u_15784515/5735187

相关文章

  • Codeforces Round #570 (Div. 3) C. Computer Game(二分)
    https://codeforces.com/contest/1183/problem/C题目大意:给定k的总时间,必须玩n局,每一局正常消耗a时间,插电玩消耗b时间问我们在能>0的剩余时间内玩完这n局下的可以最大......
  • 文件查找与读取的常用指令
    目录findgrepcatmoreheadtailfind通常用来在特定目录下搜索符合条件的文件用法:find[路径][方法][参数]命令含义find./-name1.txt查找当前路径下......
  • 折半查找
    #include<map>#include<stdio.h>#include<iostream>usingnamespacestd;longlongbox[50];longlongpos[50];intmain(){longlongn,m;cin>>n>......
  • LeetCode二分搜索
    SearchinRotatedSortedArrayLeetCode/力扣先判断中间的和尾部的数字大小,再判断target和首尾中三个数字大小关系,如此便能进行二分搜索intsearch(vector<int>&nums,......
  • 二分图
    二分图的判定不存在奇数环。可以通过匈牙利算法,染色判定。booldfs(intx,intt){ st[x]=t; for(inti=head[x];i;i=ne[i]) { inty=ver[i]; if(!st[y]) { ......
  • Java二分查找代码实现
    Java二分查找代码实现及原理简要分析代码原理描述前提:已经有一个排好序的数组(否则需要先排序)定义左边界left,右边界right,确定搜索范围,循环执行二分查找(第3、4步骤)......
  • 树结构系列(一):从普通树到二叉查找树
    树结构是数据结构中非常重要的一种类型,本文将从最基础的普通树结构入门,延伸到二叉树,再延伸至二叉查找树。通过这种思路,让大家构建起关于树的最基本的知识链路。普通树树是一......
  • CF1415D XOR-gun 题解 二分答案/贪心
    题目链接https://codeforces.com/problemset/problem/1415/D题目大意给定一个长为\(n\)的不降序列,每次操作可以任选相邻的两个数,并将这两个数替换为两个数按位异或的......
  • 前端程序员学习 Golang gin 框架实战笔记之二分析 context
    上一节:前端程序员学习Golanggin框架实战笔记之一开始玩gin之前讲到了如何使用gin,这一节我们来分析和调试一下它的代码。New()第一行的gin.New(),其实还有一种......
  • 算法突破:二分查找
    LeetCode75学习计划适用于想为技术面试做准备但不确定应该聚焦于哪些题目的用户。学习计划中的题目都是经过精心挑选的,Level1和Level2学习计划是为初级用户和中级用户......