题意: 给你一个整数数组 bloomDay,以及两个整数 m 和 k 。 现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。 花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。 请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。
思路: 对于不能满足的情况无非是 bloomDay.size() < m * k;
我们很容易得到天数无非是在 bloomDay 元素中的最小值与最大值之间。
那么我们自然就想到了二分去做,我们二分天数。如果当前天数可以实现采取m束花,那么我们就减少天数继续去试是否可以满足。不可以实现的话,我们就需要增大天数去试试。
如此就可以找到最少满足的天数。
代码语言:javascript复制class Solution {
public:
int minDays(vector<int>& bloomDay, int m, int k) {
int len = bloomDay.size();
if(len < m * k) return -1;
int l = 0,r = 0;
for(int b:bloomDay){
r = max(r,b);
l = min(l,b);
}
while(l<r){
int mid = (r-l)/2 l;
if(check(bloomDay,m,k,mid)){
r = mid;
}
else{
l = mid 1;
}
}
return l;
}
bool check(vector<int>& bloomDay,int m,int k,int day){
int flower = 0;
int num = 0;
for(int b:bloomDay){
if(b<=day){
flower ;
if(flower == k){
num ;
flower = 0;
}
}
else{
flower = 0;
}
}
return num >= m;
}
};