LeetCode 任務調度器-Python3<八>


題目:https://leetcode-cn.com/problems/task-scheduler/description/

給定一個用字符數組表示的 CPU 需要執行的任務列表。其中包含使用大寫的 A - Z 字母表示的26 種不同種類的任務。任務可以以任意順序執行,並且每個任務都可以在 1 個單位時間內執行完。CPU 在任何一個單位時間內都可以執行一個任務,或者在待命狀態。

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

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

示例:

輸入: tasks = ["A","A","A","B","B","B"], n = 2
輸出: 8
執行順序: A -> B -> (待命) -> A -> B -> (待命) -> A -> B.  

注:

  1. 任務的總個數為 [1, 10000]。   (這個邊界點1??不就是1個單位時間。)
  2. n 的取值范圍為 [0, 100]。            (這個邊界點0???要謹慎了 0不就是直接執行一個又一個,長度也就是隊列長度。)

 

還真不會做,看了網上的各種答案,才領悟了。

思路:先排重復最多的,例如這題A - - A -- A --  (- 為間隔時間,間隔多少取決於n),然后其他元素依次插空 ,A B - A B - A B    。除去最后的A B 模塊 , 前面的模塊總執行時間  (m-1)*(n+1) , m為重復出現最多的次數 。最后模塊肯定有A自己一個,至於A后面填充什么,就看哪些元素種類個數和A一樣多 。最后不可能有待定了。

class Solution:
    def leastInterval(self, tasks, n):
        """
        :type tasks: List[str]
        :type n: int
        :rtype: int
        """
        length = len(tasks)
        if length==1:
            return 1
        output = [0]*26
        for i in tasks:
            output[ord(i)-ord('A')] = output[ord(i)-ord('A')]+1
 
        count = 0
        len_o = 0
        max_o = max(output)
        for i in output:
            if i==max_o:
                count = count+1
                    
        return max(length,(max_o-1)*(n+1)+count)  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM