二分算法总结

思想:

  对含答案的区间进行二分处理,每次将区间一分为二,并只保留含答案的区间,当区间长度为1时,这个区间里的数就是答案。(此时 l == r)

二分和单调性的关系:
有单调性的一定可以二分,但可以二分的不一定有单调性,即没有单调性也可以二分。

何时用二分:
最优化问题(如求最长的长度)求解很困难时,可将问题转化为判定问题:判定一个数合不合法,合法看右边有没有更大值;不合法再看左边找最优解

二分模板总结

二分查找算法模板

浮点数二分(无需考虑边界问题)

  • 浮点数二分解题步骤:
    1.取含答案的区间[l, r]。
    2.根据题意找到一个具有二段性的判断条件,并且使答案一定是该二段性的分界点。
    3.分析中点mid = (l + r) / 2 在该判断条件下是否成立。
    如果成立,考虑答案在哪个区间;
    如果不成立,考虑答案在哪个区间。
    4.确定更新方式r = mid 或 l = mid。

    1

整数二分(需要考虑边界问题)

  • 整数二分解题步骤:
    1.取含答案的区间[l, r]。
    2.根据题意找到一个具有二段性的判断条件,并且使答案一定是该二段性的分界点。
    3.分析中点mid在该判断条件下是否成立。
    如果成立,考虑答案在哪个区间;
    如果不成立,考虑答案在哪个区间。
    4.当分段点左侧满足性质时,r = mid,否则 l = mid+ 1,mid = l + r >> 1;
    当分段点右侧满足性质时,l = mid,否则 r = mid - 1, mid = l + r + 1 >> 1.)
    中间值属于右区间,用上取整;属于左区间,用下取整。
  • 题目归纳
    分巧克力
    旋转数组的最小数字
    LeetCode_最长公共前缀

  1. 附:浮点数二分循环结束条件:
    区间精度至少要比题目要保留的小数位数高2位。
    以上题目均引自AcWing
    ↩︎

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星航夜空的帆舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值