二分查找应用:珂珂吃香蕉、在D天内送达包裹的能力、分割数组的最大值、每个小孩最多能分到多少糖果、寻找旋转排序数组中的最小值、搜索旋转排序数组
875.珂珂吃香蕉
珂珂喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。
珂珂可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。
珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。
返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。
1 | |
1011.在D天内送达包裹的能力
传送带上的包裹必须在 days 天内从一个港口运送到另一个港口。
传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量(weights)的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。
返回能在 days 天内将传送带上的所有包裹送达的船的最低运载能力。
示例1:
1
2输入:weights = [1,2,3,4,5,6,7,8,9,10], days = 5
输出:15
1 | |
410.分割数组的最大值
给定一个非负整数数组
nums和一个整数m,你需要将这个数组分成m个非空的连续子数组。设计一个算法使得这
m个子数组各自和的最大值最小。
思路:这道题和前一道1011的运输问题是一模一样的。改写一下题目:你只有一艘货船,现在有若干货物,每个货物的重量是
nums[i],现在你需要在m天内将这些货物运走,请问你的货船的最小载重是多少?货船每天运走的货物就是
nums的一个子数组,在m天内运完就是将nums划分成m个子数组,让货船的载重尽可能小,就是让所有子数组中最大的那个子数组元素之和尽可能小。代码跟上面那个题一模一样的
二分搜索,最小值为
nums中的最大值,最大值为nums中所有值的和
1 | |
2226.每个小孩最多能分到多少糖果
给你一个 下标从 0 开始 的整数数组 candies 。数组中的每个元素表示大小为 candies[i] 的一堆糖果。你可以将每堆糖果分成任意数量的 子堆 ,但 无法 再将两堆合并到一起。
另给你一个整数 k 。你需要将这些糖果分配给 k 个小孩,使每个小孩分到 相同 数量的糖果。每个小孩可以拿走 至多一堆 糖果,有些糖果可能会不被分配。
返回每个小孩可以拿走的 最大糖果数目 。
1
2
3示例1:
输入:candies = [5,8,6], k = 3
输出:5
1 | |
153.寻找旋转排序数组中的最小值
1 | |
33.搜索旋转排序数组
1 | |
852.山脉数组的顶峰索引
1 | |
162.寻找峰值
1 | |
287.寻找重复数
1 | |
11.盛水最多的容器
1 | |