From d1e6ee86c522cc947d8bd3777fcbd62cb9759199 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Wed, 19 Jun 2024 10:38:59 +0200 Subject: [PATCH] =?UTF-8?q?go:=20add=20=C2=AB1482.=20Minimum=20Number=20of?= =?UTF-8?q?=20Days=20to=20Make=20m=20Bouquets=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- ...nimum-number-of-days-to-make-m-bouquets.go | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 go/minimum-number-of-days-to-make-m-bouquets.go diff --git a/go/minimum-number-of-days-to-make-m-bouquets.go b/go/minimum-number-of-days-to-make-m-bouquets.go new file mode 100644 index 0000000..ad642aa --- /dev/null +++ b/go/minimum-number-of-days-to-make-m-bouquets.go @@ -0,0 +1,43 @@ +package main + +func minDays(bloomDay []int, m int, k int) int { + getBouquets := func(day int) int { + bouquets := 0 + + count := 0 + for i := range bloomDay { + if bloomDay[i] <= day { + count++ + } else { + count = 0 + } + + if count == k { + bouquets++ + count = 0 + } + } + + return bouquets + } + + firstDay := 0 + lastDay := 0 + for _, day := range bloomDay { + lastDay = max(lastDay, day) + } + + minDay := -1 + for firstDay <= lastDay { + mid := (firstDay + lastDay) / 2 + + if getBouquets(mid) >= m { + minDay = mid + lastDay = mid - 1 + } else { + firstDay = mid + 1 + } + } + + return minDay +}