对二分的理解

简介: 对二分的理解

登录 - 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的图理解一下



目录
相关文章
|
2月前
|
算法 开发者 索引
二分算法详解
本文介绍了二分查找及其相关问题的解决方法,包括基本的二分查找、查找元素的第一个和最后一个位置、求平方根、搜索插入位置、寻找峰值和旋转数组中的最小值等问题。通过详细分析每种情况下的二分查找策略,如循环条件、区间划分及特殊情况处理,提供了清晰的代码实现。适用于算法初学者和需要巩固二分查找技巧的开发者。
113 18
二分算法详解
|
2月前
|
算法 C++
你真的懂二分吗?
你真的懂二分吗?
|
7月前
|
存储 算法
二分查找的一种改进-拉格朗日插值查找法
二分查找的一种改进-拉格朗日插值查找法
36 0
|
2月前
|
算法 C++
【算法】双指针+二分(C/C++
【算法】双指针+二分(C/C++
二分搜索树
大家好,我是王有志。我们已经通过两篇文章认识了一棵树,今天我们学习二叉树中最简单的应用--二分搜索树。
61 0
二分搜索树
|
算法 C语言 C++
【双指针问题】977. 有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
57 0
|
移动开发
二分专题讲解-看完之后必须会二分
二分专题讲解-看完之后必须会二分
93 0
|
机器学习/深度学习 存储 人工智能
“二分“==“二分查找“ ?“yes“:“no“;
“二分“==“二分查找“ ?“yes“:“no“;
127 0
|
算法
二分
二分
108 0
|
算法 搜索推荐
LeetCode:977. 有序数组的平方
题目描述:给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。