首页 > 编程语言 >【算法浅谈】二分法

【算法浅谈】二分法

时间:2022-10-08 14:38:20浏览次数:73  
标签:浅谈 int mid sqrt 二分法 算法 ans left


二分法注意边界的开闭,以及除法自动取整的特性。

public int mySqrt(int x) {
//使用简单二分法进行排除得出开方结果
int ans = 0;
//对输入为0的情况单独考虑
if(x == 0) return x;
//当输入不为0时,在[1,x]之间不断二分,当得到的结果的平方
int left = 1,right = x;
while(left<=right){
mid = left + (right-left)/2; //如果商为小数则默认取整
if(sqrt==mid) return mid;
else if(mid > sqrt){
//目的是希望ans与sqrt尽可能接近,故当ans更大时,就应该在ans的左边设置新区间
//又由于ans本身如果不能与sqrt相等的话,就会导致最终不满足循环条件,则应该取其右边的数,因为ans是取小的结果
right = mid - 1;
}else{
left = mid + 1;
}
}
}

下面是一个很好的二分解释视频 和 模板

【算法浅谈】二分法_数据结构



(图片来自B站视频 ​​二分查找怎么总是写错​​ )

其实很多用到二分的问题就是在找蓝红的边界(该边界即为图中的K索引或者K-1索引)。下面写一下该视频采取的求解思路,左闭右闭?

【算法浅谈】二分法_数组_02


模板

这里需要从数学的角度来理解这个模板,它的思想在于m是用于寻找边界的指针,需要由l和r共同决定其值,考虑到一些特殊情况,所以m必须满足[0,N)以内,也即m∈[0,N],保证可以遍历到给定数组的所有元素。而循环退出条件之所以设置为l+1是否等于r,则表明在l和r相邻时退出循环,此时所要寻找的边界要么选取 l 要么选取 r 即可。

步骤:

  1. 根据题意划分蓝红区域
  2. 根据蓝红区域的划分设置isBlue的条件(即蓝色区间满足的条件)
  3. 根据题目需要选择返回值

例子:

【算法浅谈】二分法_二分法_03



实践案例: ​​力扣第34题​

搜索旋转排序数组
定义如下:

在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
(PS:旋转后其实就是类似两个排好序的数组合并)
来源:力扣(LeetCode)
链接:​​​https://leetcode.cn/problems/search-in-rotated-sorted-array​


标签:浅谈,int,mid,sqrt,二分法,算法,ans,left
From: https://blog.51cto.com/u_15818359/5737603

相关文章

  • 思无界实习招聘|移动端SLAM、语义SLAM、三维重建等多个算法岗位
    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁。思无界科技TF-SLAM团队实习招聘TF-SLAMGroup:SLAM团队成员主要来自慕尼黑工......
  • 月薪25K-35K|格灵研究院招聘算法工程师、Java架构师
    3D视觉工坊致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁。公司介绍深圳市格灵人工智能与机器人研究院(以下简称“格灵研究院”)位于深圳......
  • 浅谈前端常用设计模式之一:策略模式
    前言2022年,前端技术依旧日新月异,各种新兴技术或业务解决方案层出不穷。但我始终认为,在变与不变之间,唯有经典永恒,设计模式就是经典之一。在笔者从业期间,见过很多不同人写......
  • 串的KMP算法
    内存中的存储方式=顺序分配+指针,串有顺序表、串符指向堆、块链3种经典匹配——==后移,!=丢弃时间复杂度——最坏:(n-m+1)*m=O(mn),平均O(mn)KMP算法:时间复杂度=O(m+n)......
  • 算法 玩转数据结构 2-6 使用泛型
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13411 1重点关注1.1泛型改造==转equals详见3  2课程内容见3 3......
  • 数据结构和算法介绍
     1.什么是数据结构和算法呢?   2.什么是数据结构   图书摆放规则  常见的数据结构     3.什么是算法?     补充 ......
  • JS数据结构与算法
     1.重要性什么是数据结构?数据结构和算法的重要性 2.线性结构2.1数组数组使用的API 2.2栈自定义栈栈的应用 2.3队列自定义队列优先级队列队列的应......
  • 算法练习-第十天【字符串】
    字符串459.重复的子字符串参考:代码随想录思考判断一个字符串s是否包含子串,可以将2个s首尾相连,组合成t=s+s(剔除首尾字符),如果字符串s存在字串,那么t一定存在字符串s。......
  • LeetCode 阶乘后的零算法题解 All In One
    LeetCode阶乘后的零算法题解AllInOnefactorial阶乘后的零原理图解实现factorial计算后面0的个数,除0!本身的0阶乘!https://www.shuxuele.com/num......
  • 简单理解slot算法和shadow DOM
    阅读完这篇博客你会有以下收获:slot算法是什么?shadowDOM是什么?vueslot机制与w3cwebcomponent规范的shadowDOM渲染结果有何异同?slot算法Theslottingalgorithmassign......