一、题目
二、思路
- 速度 k(单位:根/小时)是存在一个取值范围的。
- 速度越大肯定在规定的时间之内一定会吃完全部的香蕉,但也是可以确定出一个上界的。由于只要保证一小时之内,可以吃完香蕉数目最多的那一堆的香蕉,那么其他数目更小的香蕉在1小时之内肯定都是可以吃完的,那么 k 的最大值就是数组的最大值。
- k 肯定不为 0,又是整数,确定其最小值为 1.
- k ∈ [1, max_pile]
- 采用二分查找进行寻找 k 的最小值。
三、代码
class Solution {public int minEatingSpeed(int[] piles, int h) {int n = piles.length;int l = 1, r = 0;for (int pile : piles) {r = Math.max(r, pile);}while (l <= r) {int mid = l + (r - l)/2;if (check(piles, h, mid)) {r = mid - 1;} else {l = mid + 1;}}return l;}public boolean check(int[] piles, int h, int mid) {int sum = piles.length;for (int pile : piles) {sum += (pile - 1) / mid;if (sum > h) {return false;}}return true;}
}