思路:二分查找,时间复杂度0(n*30)。
class Solution {
public:
bool check(int u,vector<int>& bloomDay, int m, int k){
int sum=0;
int ct=0;
for(int i=0;i<bloomDay.size();i++){
if(bloomDay[i]<=u) ct++;
else{
sum+=ct/k;
ct=0;
}
}
sum+=ct/k;
return sum>=m;
}
int minDays(vector<int>& bloomDay, int m, int k) {
int n=bloomDay.size();
if((long long)n<(long long)m*k) return -1;//注意这里m*k会超出int的范围
int l=1,r=1e9;
while(l<r){
int mid=(l+r)/2;
if(check(mid,bloomDay,m,k))r=mid;
else l=mid+1;
}
return r;
}
};