问题描述
简要思路
二分查找最小的天数。
代码
class Solution {
public:
int minDays(vector<int>& bloomDay, int m, int k) {
int n = bloomDay.size();
if(m * k > n) return -1;
int l = 0, r = 0;
for(int i = 0; i < n; i++){
if(bloomDay[i] > r) r = bloomDay[i];
}
while(l < r){
int mid = l + r >> 1;
int ans = check(bloomDay, n, mid, k);
if(ans >= m) r = mid;
else l = mid + 1;
}
return l;
}
int check(vector<int> bloomDay, int n, int mid, int k){
int res = 0, cnt = 0;
for(int i = 0; i < n; i ++){
if(bloomDay[i] <= mid) cnt++;
else cnt = 0;
if(cnt == k){
res++;
cnt = 0;
}
}
return res;
}
};