二分的本质:
如果我们能够通过某种方式将一个区间划分成两个区间,左边区间满足某种特性;右边区间不满足某种特性。
那么我们就能够通过二分法来寻找左区间的右边端点或者右区间的左边端点
有单调性一定可以二分,但是二分不一定要有单调性
注意:配套讲解视频:B 站《百学原理》 - 二分法专题
注意:配套分析总结文章:二分法专题(一) 二分法专题(二)
注意: 部分可能涉及到知识产权的题目链接已在 LeetCode 删除,完全版在github algos courseware
binary_search(l , r): # 模板一:寻找右区间的左端点
while l < r:
mid = (l+r)//2
if check(mid): r = mid
else: l = mid+1binary_search(l , r): # 模板二:寻找左区间的右端点
while l < r:
mid = (l+r+1)//2
if check(mid): l = mid
else: r = mid-1为什么是整数的时候会有很多边界问题呢?
因为整数范围缩小到 2 时候,可能进入死循环。
binary_search(l , r): # 寻找结果
eps = 1e-6
while r - l >= eps:
mid = (l+r) / 2
if check(mid): r = mid
else: l = mid其他例题已删
在算法题目中结合多种技巧解决一道题目是很常见的事,下面就给大家列举一些二分法结合其他算法的题目,这些题目就不讲解了,有问题可以在答疑群里面提出来。
数学+二分:
贪心+二分 LIS 问题(动态规划专题讲解)