leetcode 621 任務排程器

2021-10-11 11:14:37 字數 2693 閱讀 4488

目錄

一、題目內容

二、解題思路

三、**

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

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

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

示例 1:

輸入:tasks = ["a","a","a","b","b","b"], n = 2

輸出:8

解釋:a -> b -> (待命) -> a -> b -> (待命) -> a -> b

在本示例中,兩個相同型別任務之間必須間隔長度為 n = 2 的冷卻時間,而執行乙個任務只需要乙個單位時間,所以中間出現了(待命)狀態。

示例 2:

輸入:tasks = ["a","a","a","b","b","b"], n = 0

輸出:6

解釋:在這種情況下,任何大小為 6 的排列都可以滿足要求,因為 n = 0

["a","a","a","b","b","b"]

["a","b","a","b","a","b"]

["b","b","b","a","a","a"]

...諸如此類

示例 3:

輸入:tasks = ["a","a","a","a","a","a","b","c","d","e","f","g"], n = 2

輸出:16

解釋:一種可能的解決方案是:

a -> b -> c -> a -> d -> e -> a -> f -> g -> a -> (待命) -> (待命) -> a -> (待命) -> (待命) -> a

1 <= task.length <= 104

tasks[i] 是大寫英文本母

n 的取值範圍為 [0, 100]

1.將任務進行歸類,並記錄任務的個數;

2.按照任務的個數將任務進行排列,從小到大;

3.如果空位都插滿之後還有任務沒有排布,則隨便插入即可(空位個數為(maxcount - 1)*n);

4.返回任務總長和插空後長度的大者(插空的間隔大於n,則取總長即可);

class solution:

def leastinterval(self, tasks, n: int) -> int:

""":param tasks: list[str]

:param n: int

:return: int

""""""

解題思路:

1、將任務進行歸類,並記錄任務的個數

2、按照任務的個數將任務進行排列

3、如果空位都插滿之後還有任務沒有排布,則隨便插入即可。

"""if len(tasks) <= 1 or n < 1:

return len(tasks)

# 將任務進行歸類,並記錄任務的個數

counts = [0] * 26

for i in tasks:

counts[ord(i) - 65] += 1

# print(counts)

# 按照任務的個數將任務進行排列

"""maxcount: 任務的最大個數

retcount: 第乙個任務的排布

"""counts.sort()

# print(counts)

maxcount = counts[25]

# a - () - () - a - () - () - a

# retcount = 2 * [a - () - ()] + a

retcount = (maxcount - 1) * (n + 1) + 1

# 排布其他任務

i = 24

while i >= 0 and counts[i] == maxcount:

# a - b - () - a - b - () - a - b

retcount += 1

i -= 1

return max(retcount, len(tasks))

if __name__ == '__main__':

n = 2

s = solution()

tasks = ["a","a","a","a","a","a","b","c","d","e","f","g"]

ans = s.leastinterval(tasks, n)

print(ans)

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的冷卻時...