LeetCode1482_制作 m 束花所需的最少天数

网友投稿 226 2022-09-23

LeetCode1482_制作 m 束花所需的最少天数

1. 题目

给你一个整数数组 bloomDay,以及两个整数 m 和 k 。现需要制作 m 束花。制作花束时,需要使用花园中 相邻的 k 朵花 。花园中有 n 朵花,第 i 朵花会在 bloomDay[i] 时盛开,恰好 可以用于 一束 花中。请你返回从花园中摘 m 束花需要等待的最少的天数。如果不能摘到 m 束花则返回 -1 。示例 1:输入:bloomDay = [1,10,3,10,2], m = 3, k = 1输出:3解释:让我们一起观察这三天的花开过程,x 表示花开,而 _ 表示花还未开。现在需要制作 3 束花,每束只需要 1 朵。1 天后:[x, _, _, _, _] // 只能制作 1 束花2 天后:[x, _, _, _, x] // 只能制作 2 束花3 天后:[x, _, x, _, x] // 可以制作 3 束花,答案为 3示例 2:输入:bloomDay = [1,10,3,10,2], m = 3, k = 2输出:-1解释:要制作 3 束花,每束需要 2 朵花,也就是一共需要 6 朵花。而花园中只有 5 朵花,无法满足制作要求,返回 -1 。示例 3:输入:bloomDay = [7,7,7,7,12,7,7], m = 2, k = 3输出:12解释:要制作 2 束花,每束需要 3 朵。花园在 7 天后和 12 天后的情况如下:7 天后:[x, x, x, x, _, x, x]可以用前 3 朵盛开的花制作第一束花。但不能使用后 3 朵盛开的花,因为它们不相邻。12 天后:[x, x, x, x, x, x, x]显然,我们可以用不同的方式制作两束花。示例 4:输入:bloomDay = [1000000000,1000000000], m = 1, k = 1输出:1000000000解释:需要等 1000000000 天才能采到花来制作花束示例 5:输入:bloomDay = [1,10,2,9,3,8,4,7,5,6], m = 4, k = 2输出:9 提示:bloomDay.length == n1 <= n <= 10^51 <= bloomDay[i] <= 10^91 <= m <= 10^61 <= k <=

2. 题解

from typing import Listclass Solution: def minDays(self, bloomDay: List[int], m: int, k: int) -> int: if m * k > len(bloomDay): return -1 # 编写一个函数,表示这个天数最多能摘多少花 def check(today): flower = 0 count = 0 for bo in bloomDay: if bo <= today: count += 1 if count == k: flower += 1 count = 0 else: count = 0 # 中间中断了 return flower >= m left = min(bloomDay) right = max(bloomDay) while left < right: mid = left + (right - left) // 2 if check(mid): right = mid else: left = mid + 1 return

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:国人更爱什么香水?近半数选择花香调,千禧一代怕“撞香”!
下一篇:LeetCode1011_在 D 天内送达包裹的能力
相关文章

 发表评论

暂时没有评论,来抢沙发吧~