https://leetcode.com/problems/task-scheduler/
621. Task Scheduler
給你一個字元列表表示不同種類的任務,相同種類的任務要隔 n 個時間單位才可以執行,
求出怎樣安排最快可完成所有任務。
1.模擬排程 先計數任務數量 每次拿次數最多的任務做(如果沒cd) 用 maxheap
2.把還在cd的任務放在一個queue,如果過期就放回maxheap 做到兩個queue都沒任務
為止
pycode
--------------------------------------------
class Solution:
def leastInterval(self, tasks: List[str], n: int) -> int:
freq_map = collections.defaultdict(int)
for task in tasks:
freq_map[task] += 1
max_heap = []
for task, freq in freq_map.items():
heapq.heappush(max_heap, (-freq, task))
idle_task = deque()
curr_time = 0
while True:
# 有任務就緒,重回queue
while idle_task and curr_time > idle_task[0][0]:
x = idle_task.popleft()
if x[1] == 0:
continue
heapq.heappush(max_heap, (-x[1], x[2]))
if not max_heap and not idle_task:
break
# 有任務可以安排
if max_heap:
freq, task = heapq.heappop(max_heap)
if freq != -1:
idle_task.append((curr_time + n, -freq - 1, task))
if not max_heap and idle_task:
curr_time = idle_task[0][0] + 1
else:
curr_time += 1
return curr_time
--------------------------------------------
我寫了一個小時多 汗流浹背了老哥==
https://i.imgur.com/6wW8p7f.jpeg
python的自定義heap跟答辯一樣==
--
https://i.imgur.com/PIoxddO.jpg
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.138.169.124 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1710817597.A.CAB.html