对二分的理解

简介: 对二分的理解

登录 - AcWing

对二分的理解总是不够深刻,死循环,对题解的一些整理,自己看

1)

一个mid = (l+r)>>1

一个mid = (l+r+1)>>1

加不加1 完全取决于 l = mid 还是r = mid

l等于mid时必须+1向上取整 不然会陷入l=l的死循环

r = mid 时候不用加1 因为下一步l = r 直接会退出循环

2)

这两个模板解决的是 找>=||<=||>||< 某个数的

最左或最右的位置 但这个数不一定在二分的数组中

如果在就能准确找到

如果不在 找到的就是最接近答案的数(你要找大于等于5的第一个数)但

数组中没有5 那找到的就是6的位置(如果有6的话)

所以二分是一定有答案的


对于二分首先是确定你要找哪一个值一共有四种情况:


1.找小于x的第一个数的位置  (最左边x的左边第一个数)<x  -->  l = mid -- > mid = l + r + 1 >> 1


2.找大于等于x的第一个数的位置 (最左边的x) >= x  --> r = mid -- > mid = l + r >> 1


3.找大于x的第一个数的位置 (最右边x的右边第一个数)>x --> r = mid -- > mid = l + r >> 1 ;


4.找小于等于x的最后一个数的位置(最右边的x) <= x --> l = mid -- > mid = l + r + 1 >> 1 ;


当l=mid的时候mid = l + r  + 1>> 1 当 r = mid 的时候mid = l + r >> 1 ;


不懂的看下面acwing的图理解一下



目录
相关文章
|
13天前
|
算法 开发者 索引
二分算法详解
本文介绍了二分查找及其相关问题的解决方法,包括基本的二分查找、查找元素的第一个和最后一个位置、求平方根、搜索插入位置、寻找峰值和旋转数组中的最小值等问题。通过详细分析每种情况下的二分查找策略,如循环条件、区间划分及特殊情况处理,提供了清晰的代码实现。适用于算法初学者和需要巩固二分查找技巧的开发者。
62 18
二分算法详解
|
9天前
|
算法 C++
你真的懂二分吗?
你真的懂二分吗?
|
9天前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
|
5月前
|
算法 大数据
二分查找和二分答案
二分查找和二分答案
48 1
|
5月前
|
算法 索引
二分查找与二分答案
二分查找与二分答案
|
机器学习/深度学习
切木材(二分法)
切木材(二分法)
68 0
|
5月前
|
算法 Java C语言
二分法的应用
二分法的应用
|
5月前
|
算法 NoSQL 容器
二分查找 三分查找与二分答案
二分查找 三分查找与二分答案
|
11月前
|
算法
二分法以及三分法的使用
二分法以及三分法的使用
114 0
二分搜索树
大家好,我是王有志。我们已经通过两篇文章认识了一棵树,今天我们学习二叉树中最简单的应用--二分搜索树。
57 0
二分搜索树