Binary Search (Brute Force solution)
class Solution:
def minDays(self, A: List[int], m: int, k: int) -> int:
"""
constrains: (1) len(A) >= m*k (2) adjacent k flowers => after t, there are m*k flowers and each bunch has k adjecent flowers
tc O(Nlg(maxA)) sc O(1)
"""
def cntBouquet(t:int,A:List[int])->int:
flowers = bouquet = 0
for a in A:
if k != 1:
if a <= t:
flowers += 1
else:
bouquet += flowers//k
flowers = 0
else:
bouquet += (a<=t)
bouquet += flowers//k # there are remaining flowers
#print(f'at day {t} there are {bouquet} bunches')
return bouquet
if len(A) < m*k:
return -1
l,r = min(A),max(A)+1
while l < r:
mid = l + (r-l)//2
if cntBouquet(mid,A) < m: # mid days is small
l = mid + 1
else:
r = mid
return r
TODO tc O(N) solution by sorting refer