采用二分法查找,如果所需的花的数量大于总共的花数则不能满足要求,然后最多等待的天数是最长开花时间的花束记为high,最后采用二分查找法进行搜索,查找满足条件的最少等待天数。
class Solution {
public int minDays(int[] bloomDay, int m, int k) {
int length = bloomDay.length;
if(k * m > length){return -1;}
int low = 0,high = 0;
for(int i = 0;i < length;i++){
high = Math.max(high,bloomDay[i]);
}
while(low < high){
int days = (low + high)/2;
if(judge(days,bloomDay,m,k)){
high = days;
}else{
low = days + 1;
}
}
return low;
}
public boolean judge(int days,int[] bloomDay,int m,int k){
int res = 0;
int flowers = 0;
for(int i = 0;i < bloomDay.length&&res < m;i++){
if(bloomDay[i] <= days){
flowers++;
if(flowers == k){
res++;
flowers = 0;
}
}else{
flowers = 0;
}
}
return res >= m;
}
}