1. 题目来源
相关题目:[M二分答案] lc1011. 在 D 天内送达包裹的能力(二分答案)
2. 题目解析
给定一个天数,很容易判断天数是否是合法的,即能将花制作完成。最少等待的天数 d
,小于这个 d
则制作不完成,大于这个 d
即能制作完成,那么就可以针对天数二分答案了。
- 时间复杂度: O ( n l o g n ) O(nlogn) O(nlogn)
- 空间复杂度: O ( 1 ) O(1) O(1)
dfs
class Solution {
public:
bool check(vector<int>& b, int m, int k, int x) {
int cnt = 0;
for (int i = 0, j = 0; i < b.size(); i ++ ) {
if (b[i] <= x) {
j ++ ;
if (j == k) {
j = 0;
cnt ++ ;
}
} else j = 0;
}
return cnt >= m;
}
int minDays(vector<int>& bloomDay, int m, int k) {
int n = bloomDay.size();
if (m * k > n) return -1;
int l = 0, r = 1e9;
while (l < r) {
int mid = l + r >> 1;
if (check(bloomDay, m, k, mid)) r = mid;
else l = mid + 1;
}
return l;
}
};