Skip to content

Commit e00441a

Browse files
authored
Create minimum-number-of-days-to-make-m-bouquets.cpp
1 parent 8f2e2e6 commit e00441a

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// Time: O(nlogd), d is the max day of bloomDay
2+
// Space: O(1)
3+
4+
class Solution {
5+
public:
6+
int minDays(vector<int>& bloomDay, int m, int k) {
7+
if (m * k > bloomDay.size()) {
8+
return -1;
9+
}
10+
int left = 1, right = *max_element(cbegin(bloomDay), cend(bloomDay));
11+
while (left <= right) {
12+
const auto& mid = left + (right - left) / 2;
13+
if (check(bloomDay, m, k, mid)) {
14+
right = mid - 1;
15+
} else {
16+
left = mid + 1;
17+
}
18+
}
19+
return left;
20+
}
21+
22+
private:
23+
bool check(const vector<int>& bloomDay, int m, int k, int x) {
24+
int result = 0, count = 0;
25+
for (const auto& d : bloomDay) {
26+
count = (d <= x) ? count + 1 : 0;
27+
if (count == k) {
28+
count = 0;
29+
if (++result == m) {
30+
break;
31+
}
32+
}
33+
}
34+
return result >= m;
35+
}
36+
};

0 commit comments

Comments
 (0)