LeetCode 621 任務排程器
給你一個用字元陣列 tasks 表示的 CPU 需要執行的任務列表。其中每個字母表示一種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。在任何一個單位時間,CPU 可以完成一個任務,或者處於待命狀態。
然而,兩個 相同種類 的任務之間必須有長度為整數 n 的冷卻時間,因此至少有連續 n 個單位時間內 CPU 在執行不同的任務,或者在待命狀態。
你需要計算完成所有任務所需要的 最短時間 。
輸入:tasks = ["A","A","A","B","B","B"], n = 2
輸出:8
解釋:A -> B -> (待命) -> A -> B -> (待命) -> A -> B
在本示例中,兩個相同型別任務之間必須間隔長度為 n = 2 的冷卻時間,而執行一個任務只需要一個單位時間,所以中間出現了(待命)狀態。
from typing import *
from collections import defaultdict, Counter
import heapq
class Solution:
def leastInterval(self, tasks: List[str], n: int) -> int:
last_idx = {}
que = []
cnts = Counter(tasks)
for c in cnts:
heapq.heappush(que, (-cnts[c], c))
idx = 0
while que or last_idx:
last = idx - n - 1
if last in last_idx:
heapq.heappush(que, last_idx[last])
del last_idx[last]
if not que:
idx += 1
else:
t = heapq.heappop(que)
if t[0] + 1 < 0:
last_idx[idx] = (t[0] + 1, t[1])
idx += 1
return idx
相關文章
- 【LeetCode】每日一題621. 任務排程器LeetCode每日一題
- 力扣-621. 任務排程器力扣
- 力扣 621. 任務排程器力扣
- 621. 任務排程器 (構造)
- LeetCode每日一題--621. 任務排程器(雜湊表)LeetCode每日一題
- 任務排程
- Airflow 任務排程AI
- Laravel 任務排程Laravel
- 分散式任務排程分散式
- Spring 指南(排程任務)Spring
- Spark中資源排程和任務排程Spark
- Timer和TimerTask 任務排程
- 聊聊PowerJob的任務排程
- Linux 定時任務排程Linux
- 分散式排程任務-ElasticJob分散式AST
- laravel框架任務排程(定時執行任務)Laravel框架
- 比特幣原始碼分析:任務排程器的使用比特幣原始碼
- Windows 10任務排程器曝出新零日漏洞Windows
- Python任務排程模組APSchedulerPython
- LTS分散式任務排程部署分散式
- 用海豚排程器定時排程從Kafka到HDFS的kettle任務指令碼Kafka指令碼
- 深入 Java Timer 定時任務排程器實現原理Java
- 使用寶塔計劃任務啟動laravel排程器Laravel
- LiteOS-任務篇-原始碼分析-任務排程函式原始碼函式
- Spring排程定時任務的方式Spring
- Android 中的定時任務排程Android
- 任務排程的思考和總結
- Flink - Task 任務排程執行流程
- 任務排程框架Quartz快速入門!框架quartz
- iOS 任務排程器:為 CPU 和記憶體減負iOS記憶體
- Linux 中 Laravel 任務排程不執行LinuxLaravel
- 真香!SpringBoot官方支援任務排程框架了!Spring Boot框架
- Aloha:一個分散式任務排程框架分散式框架
- 中介軟體---分散式任務排程---Celery分散式
- 任務排程的並行演算法並行演算法
- 使用Java實現定時任務排程Java
- xxl-job,任務排程中心快速上手
- 詳解 MySQL 用事件排程器 Event Scheduler 建立定時任務MySql事件