You are given an integer array bloomDay, an integer m and an integer k.
You want to make m bouquets. To make a bouquet, you need to use k adjacent flowers from the garden.
The garden consists of n flowers, the ith flower will bloom in the bloomDay[i] and then can be used in exactly one bouquet.
Return the minimum number of days you need to wait to be able to make m bouquets from the garden. If it is impossible to make m bouquets return -1.
class Solution {
public:
int minDays(vector<int>& bloomDay, int m, int k) {
if ((long long)m * k > bloomDay.size()) {
return -1;
}
int low = 1, high = 1e9;
while (low < high) {
int mid = low + (high - low) / 2;
if (canMakeBouquets(bloomDay, m, k, mid)) {
high = mid;
} else {
low = mid + 1;
}
}
return low;
}
private:
bool canMakeBouquets(vector<int>& bloomDay, int m, int k, int day) {
int total = 0;
for (int i = 0; i < bloomDay.size(); i++) {
int count = 0;
while (i < bloomDay.size() && count < k && bloomDay[i] <= day) {
count++;
i++;
}
if (count == k) {
total++;
i--;
}
if (total >= m) {
return true;
}
}
return false;
}
};