leetCode 621 任務排程器

2021-10-11 09:23:25 字數 1438 閱讀 5790

給你乙個用字元陣列 tasks 表示的 cpu 需要執行的任務列表。其中每個字母表示一種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。在任何乙個單位時間,cpu 可以完成乙個任務,或者處於待命狀態。

然而,兩個相同種類的任務之間必須有長度為整數 n 的冷卻時間,因此至少有連續 n 個單位時間內 cpu 在執行不同的任務,或者在待命狀態。

你需要計算完成所有任務所需要的最短時間 。

相同任務之間的間隔至少為n, 每次取頻率最高的n + 1個任務。頻率高的任務應該緊湊的去使用

class

solution

// 按頻率將每個任務加入大頂堆

priorityqueue

mq =

newpriorityqueue

<

>

((x, y)

-> y - x)

;for

(integer freq : counter)

} n++

;int cnt =0;

// 每次從大頂堆中取出n個最大的元素

while

(!mq.

isempty()

)}if(k == n)

else

if(temp.size (

)>0)

else

for( integer freq : temp)

mq.offer

(freq);}

return cnt;

}}

設計桶的大小為n + 1這樣相同的任務不能放入相同的桶之中,最密也只能放入相鄰的桶中,由於要求最短時間,因此要盡可能密的排放任務,所以桶的數量為出現次數最多的任務的頻率,將所有的任務盡可能排在相鄰的桶中,任務排完後計算需要的空閒時間,如果不需要空閒時間則說明剛好排滿,如果需要空閒時間,則最小時間為空間時間加上任務數量。

class

solution

arrays.

sort

(counter)

;int maxn = counter[25]

-1;int space = maxn * n;

for(

int i =

24;i >=

0&& counter[i]

>

0; i--

)return space >

0? space + tasks.length : tasks.length;

}}

Leetcode 621任務排程

首先統計同型別的任務數,然後從大到小排序 因為數量多的任務才會因為重複,需要間隔期 排序不影響結果,無論是三個a和兩個b,還是兩個a和三個b結果是一樣的。想法是有多個桶 桶的個數取決於數量最多的任務數 桶的容量至少是n 1,桶內元素不重複,如果元素不能填滿,就需要填入冷卻時間。如果多餘元素數量大於等...

leetcode 621 任務排程器

給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必須有長度為n的冷卻時...

LeetCode 621 任務排程器

給定乙個用字元陣列表示的 cpu 需要執行的任務列表。其中包含使用大寫的 a z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。cpu 在任何乙個單位時間內都可以執行乙個任務,或者在待命狀態。然而,兩個相同種類的任務之間必須有長度為n的冷卻時...