# LC1482 - Minimum Number of Days to Make m Bouquets
## 线性关系 二分查找猜答案
```java=
class Solution {
/*
x: the number of days
f(x): if the number of days is x, it can make f(x) bouquets
*/
public int minDays(int[] bloomDay, int m, int k) {
// sanity check
// ...
int result = -1;
int length = bloomDay.length;
if (m * k > length) {
return result;
}
int minDay = 1000000000 + 1;
int maxDay = 0;
for (int day : bloomDay) {
minDay = Math.min(minDay, day);
maxDay = Math.max(maxDay, day);
}
while (minDay + 1 < maxDay) {
int midDay = minDay + (maxDay - minDay) / 2;
if (canMakeBouquetsBy(midDay, k, m, bloomDay)) {
maxDay = midDay;
} else {
minDay = midDay;
}
}
// minimum
if (canMakeBouquetsBy(minDay, k, m, bloomDay)) {
return minDay;
}
if (canMakeBouquetsBy(maxDay, k, m, bloomDay)) {
return maxDay;
}
return -1;
}
// proportional function
private boolean canMakeBouquetsBy(int targetDay, int targetNumFlowers, int targetNumBouquets, int[] bloomDay) {
int length = bloomDay.length;
int numFlowers = 0;
int numBouquets = 0;
for (int i = 0; i < length; i++) {
if (targetDay >= bloomDay[i]) {
numFlowers++;
} else {
numFlowers = 0;
}
if (numFlowers == targetNumFlowers) {
numBouquets++;
numFlowers = 0;
}
if (numBouquets >= targetNumBouquets) {
return true;
}
}
return false;
}
}
```