lc875-爱吃香蕉的珂珂

爱吃香蕉的珂珂-leetCode875

image-20230415144038215

示例 1:

1
2
输入:piles = [3,6,7,11], h = 8
输出:4

示例 2:

1
2
输入:piles = [30,11,23,4,20], h = 5
输出:30

示例 3:

1
2
输入:piles = [30,11,23,4,20], h = 6
输出:23

++++++++++

思路:二分法 + 贪心

在最小速度和最大速度之间进行二分,判断使用该速度吃香蕉需要的时间,如果比给定的时间大,则要提高速度也就是mid的右边。如果小于给定的时间,则尝试缩小速度。

代码为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Solution {
public int minEatingSpeed(int[] piles, int h) {
//最小速度
int min = 1;
//最大速度
int max = Arrays.stream(piles).max().getAsInt();
//将速度进行二分法
while (min<max){
int mid = (min+max)>>1;
//如果mid速度值小于所给的时间,则判断速度是否还可以缩小,也就是max的左边
if (check(piles,mid)<=h){
max = mid;
}else {
min = mid + 1;
}
}
return min;
}
public int check(int nums[],int speed){
int sum = 0;
for (int i = 0;i<nums.length;i++){
//向上取整
sum+=(nums[i]+speed-1)/speed;
}
return sum;
}
}

lc875-爱吃香蕉的珂珂
http://example.com/2023/04/15/lc875-爱吃香蕉的珂珂/
作者
zlw
发布于
2023年4月15日
许可协议