二分法浅谈

Posted 沧夜2021

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分法浅谈相关的知识,希望对你有一定的参考价值。

前言

最近在做力扣的 14 天计划 「算法」 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台 (leetcode-cn.com)

然后第一天就是 二分查找

704. 二分查找 - 力扣(LeetCode) (leetcode-cn.com)

278. 第一个错误的版本 - 力扣(LeetCode) (leetcode-cn.com)

35. 搜索插入位置 - 力扣(LeetCode) (leetcode-cn.com)

虽然题目难度不大,但是还是得惊呼一声好家伙

然后发现了之前长期未解决并暴露的问题:

什么时候用left<right?什么时候用left<=right?

搜索的区间如何定义?

(left+right)/2 溢出如何解决?

循环条件?

当循环条件为 < 时

循环跳出后所得的结果为 left == right 。这时候,left 与 right 就夹出了唯一的位置,这个位置就是目标值的位置,或者说是如果这个元素存在,应该在的位置。更值得一提的是, left == right 时,返回 left,right 都行,因为它两值相等。因此可以判断元素存在时的位置。

当循环条件为 <= 时

循环跳出后所得的结果为 left > right 。这时候,left 与 right 就走过头了,此时就表明该元素不存在。因此可以判断元素存不存在

搜索的区间如何定义?

初始区间应该能够覆盖到所有可能返回的结果。下界是 0 是显然的,但是上界是 n 还是 n-1 取决于元素可不可能比所有序列中元素都大?都大则为 n

溢出如何解决?

mid = left + (right - left)/2 可以避免溢出

以上是关于二分法浅谈的主要内容,如果未能解决你的问题,请参考以下文章

整体二分浅谈

二分法浅谈

网络(最大)流初步+二分图初步 (浅谈EK,Dinic, Hungarian method:]

浅谈二分

浅谈二分和二分答案

浅谈算法-二分查找