跳到主要内容

分享丨【题单】二分算法(二分答案/最小化最大值/最大化最小值/第K小)

By 灵茶山艾府

二分题单二分查找二分算法二分入门二分题目

图: 闭区间二分循环结束时的左右指针位置(查找第一个 8)

题目已按照难度分排序,右侧数字为难度分。

如果遇到难度很大,题解都看不懂的题目,建议直接跳过,二刷的时候再来尝试。

二分查找

请先学习:二分查找 红蓝染色法【基础算法精讲 04】

二分答案: 求最小

二分答案: 求最大

一图掌握二分答案!四种写法!

在练习时,请注意「求最小」和「求最大」的二分写法上的区别。

前面的「求最小」和二分查找求「排序数组中某元素的第一个位置」是类似的,按照红蓝染色法,左边是不满足要求的(红色),右边则是满足要求的(蓝色)。

「求最大」的题目则相反,左边是满足要求的(蓝色),右边是不满足要求的(红色)。这会导致二分写法和上面的「求最小」有一些区别。

以开区间二分为例:

  • 求最小:check(mid) == true 时更新 right = mid,反之更新 left = mid,最后返回 right
  • 求最大:check(mid) == true 时更新 left = mid,反之更新 right = mid,最后返回 left

对于开区间写法,简单来说 check(mid) == true 时更新的是谁,最后就返回谁。相比其它二分写法,开区间写法不需要思考加一减一等细节,个人推荐使用开区间写二分。

二分答案: 计算间接结果

最小化最大值

本质是二分答案求最小。

最大化最小值

本质是二分答案求最大。

第 K 小/大

部分题目也可以用堆解决。

其它

请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...