Coding on 二分查找

二分查找技巧及题单

Posted by Kylin on August 28, 2023

[TOC]

二分查找

只需要把握两个点,直接起飞:

1)left、right写成开区间

2)把握循环不变量

Template

left, right = -1, n
while left + 1 < right:  # 开区间不为空
	# 循环不变量:
	# f(left) >= k
	# f(right) < k
	mid = (left + right) // 2
	if f(mid) >= k: left = mid  # 下一轮二分 (mid, right)
	else: right = mid  # 下一轮二分 (left, mid)
return left

Leetcode 题单

  • 最大化最小值 (这种题目一定要想二分)

2517. 礼盒的最大甜蜜度

- 二分答案(按照难度分排序)

875. 爱吃香蕉的珂珂
1283. 使结果不超过阈值的最小除数
2187. 完成旅途的最少时间
2226. 每个小孩最多能分到多少糖果
1870. 准时到达的列车最小时速
1011. 在 D 天内送达包裹的能力
2064. 分配给商店的最多商品的最小值
1760. 袋子里最少数目的球
1482. 制作 m 束花所需的最少天数
1642. 可以到达的最远建筑
1898. 可移除字符的最大数目
778. 水位上升的泳池中游泳
2258. 逃离火灾

- 第 k 小/大(部分题目还可以用堆解决)

373. 查找和最小的 K 对数字
378. 有序矩阵中第 K 小的元素
719. 找出第 K 小的数对距离
786. 第 K 个最小的素数分数
1439. 有序矩阵中的第 k 个最小数组和
2040. 两个有序数组的第 K 小乘积
2386. 找出数组的第 K 大和

- 最小化最大值

2439. 最小化数组中的最大值
2513. 最小化两个数组中的最大值
2560. 打家劫舍 IV
2616. 最小化数对的最大差值


- 最大化最小值

1552. 两球之间的磁力
2517. 礼盒的最大甜蜜度
2528. 最大化城市的最小供电站数目