# 1482. Minimum Number of Days to Make m Bouquets #### Difficulty: Medium link: https://leetcode.com/problems/minimum-number-of-days-to-make-m-bouquets/ ### 1. Binary Search #### $O(n * log\ (max(bloomDay) - min(bloomDay)))$ runtime, $O(1)$ space 在一個日期範圍內不斷猜測,找出最小能滿足做出m個花束條件的值。使用binary search較有效率,套用模板! 邊界範圍,`min(bloomDay)`至少一朵花和`max(bloomDay)`全部開花的日期。 ##### python ```python= class Solution: def minDays(self, bloomDay: List[int], m: int, k: int) -> int: if len(bloomDay) < m * k: return -1 def enough_bouquets(days): flow, bouq = 0, 0 for b in bloomDay: flow = flow + 1 if b <= days else 0 if flow >= k: bouq += 1 flow = 0 # early stop if bouq >= m: return True return False left, right = min(bloomDay), max(bloomDay) while left < right: mid = left + (right - left) // 2 if enough_bouquets(mid): right = mid else: left = mid + 1 return left ``` ###### tags: `leetcode`