Leetcode 3506. 查找消除细菌菌株所需时间
本文最后更新于402 天前,其中的信息可能已经过时,如有错误请发送邮件到2446865563@qq.com

1.题目基本信息

1.1.题目描述

给定一个整数数组 timeReq 和一个整数 splitTime。

在人体微观世界中,免疫系统面临着一项非凡的挑战:对抗快速繁殖的细菌群落,这对身体的生存构成威胁。

最初,只部署一个 白细胞(WBC)来消除细菌。然而,单独的白细胞很快意识到它无法跟上细菌的生长速度。

WBC制定了一种巧妙的策略来对抗细菌:

1)第 i 个细菌菌株需要 timeReq[i] 个时间单位来被消除。

2)单个白细胞只能消除 一个 细菌菌株。之后,白细胞耗尽,无法执行任何其他任务。

3)一个白细胞可以将自身分裂为两个白细胞,但这需要 splitTime 单位时间。一旦分裂,两个白细胞就可以 并行 消灭细菌。

4)一个白细胞仅可以攻击一个细菌菌株。多个白细胞不能同时攻击一个菌株。

您必须确定消除所有细菌菌株所需的 最短 时间。

注意,细菌菌株可以按任何顺序消除。

1.2.题目地址

https://leetcode.cn/problems/minimum-time-to-build-blocks/description/

2.解题方法

2.1.解题思路

哈夫曼树。将最小的两个工作的最大值+分裂的splitTime时间合并为一个工作加入到堆中,使用哈夫曼的思路求最少时间

时间复杂度:O(nlog(n))

注:本体思路同Leetcode 1199. 建造街区的最短时间

2.2.解题步骤

第一步,构建维护变量。使用heap最小堆维护哈夫曼树

第二步,不断从heap堆中弹出最小的两个元素,并取两者最大值加上split重新加入堆中,实现哈夫曼树的更新;直到heap中只剩下一个值,即为题解。

3.解题代码

Python代码

from heapq import heappop, heappush, heapify

class Solution:
    def minEliminationTime(self, timeReq: List[int], splitTime: int) -> int:
        # 思路:哈夫曼树。哈夫曼合并规则:timeReq中的最小两个值中的最大值+splitTime进行合并
        # 参考:Leetcode 1199. 建造街区的最短时间
        heap = timeReq
        heapify(heap)
        while len(heap) > 1:
            a = heappop(heap)
            b = heappop(heap)
            heappush(heap, max(a, b) + splitTime)
        return heap[0]

4.执行结果

觉得有帮助可以投喂下博主哦~感谢!

作者:geek007

转载请注明文章地址及作者哦~
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇