题目连接

解题思路

使用二分搜索,左边界为0,右边界为时间最大值。然后判断条件是看存不存在连续的花朵能够凑成我们的mid天数,能就让右边界变成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
28
29
30
31
32
33
34
35
36
class Solution {
public:
bool check(vector<int> bloomDay, int m, int k, int time){
int bouque = 0,num = 0;
for(auto day:bloomDay){
if(day<=time){
num++;
if(num == k){
bouque++;
num=0;
}
}else{
num = 0;
}
}
return bouque>=m;
}
int minDays(vector<int>& bloomDay, int m, int k) {
int l = 0, r = 0;
for(auto day:bloomDay){
r = max(day,r);
}
r++;
int flag = 0;
while(l < r){
int mid = (l + r) >> 1;
if(check(bloomDay,m,k,mid)){
flag = 1;
r = mid;
}else{
l = mid + 1;
}
}
return flag?r:-1;
}
};