621. Task Scheduler - Medium
前往題目
之前寫的文章
有難度的一題
思路
很重要的觀念是task
的頻率由大到小,每次取前n
個來排,也就是說假設今天是n=2
,然後有A
出現5
次,B
出現3
次,C
出現1
次,那就是取AB
,然後A
和B
各減1
。這樣可以保證最少次數的Idle
,不然先把小頻率的都取完了,之後為了滿足條件就必須每次都放n — 1
個Idle
,就不是最小單位時間了
priority queue(pq)
來儲存每個task
的頻率,由大到小- 在
pq
裡,取n
或是pq.size()
當作k
,看誰比較小,因為取到比較大的那個,會導致pq
沒有item
或是取超出n
個item
- 取出
k
個之後,每個任務頻率做相應的減去 - 如果還不是最後一輪,就加上
n
個,因為每個區間要n
個;如果是最後一輪,加上k
,因為不需要再Idle
了 - 還有
task
的話再塞回去pq
裡面進行下一輪的安排
Code
621. Task Scheduler - Medium
https://f88083.github.io/2024/04/10/621-Task-Scheduler-Medium/