看板 Marginalman
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