Leet Code 2024-06-19 - Minimum Number of Days to Make m Bouquets
Solution
Binary search.
Code
class Solution {
public:
int cntBouquets(vector<int>& bloomDay, int day, int k) {
int ret = 0, cnt = 0;
for (const auto& x : bloomDay) {
if (x > day) {
cnt = 0;
continue;
}
if (++cnt >= k) {
ret++;
cnt = 0;
}
}
return ret;
}
int minDays(vector<int>& bloomDay, int m, int k) {
int low = 0, high = *max_element(bloomDay.begin(), bloomDay.end());
if (cntBouquets(bloomDay, high, k) < m) {
return -1;
}
while (low < high) {
int mid = (low + high) / 2;
if (cntBouquets(bloomDay, mid, k) >= m) {
high = mid;
} else {
low = mid + 1;
}
}
return low;
}
};