91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang中怎么利用leetcode 實現一個任務調度器

發布時間:2021-07-06 15:16:25 來源:億速云 閱讀:211 作者:Leah 欄目:編程語言

golang中怎么利用leetcode 實現一個任務調度器,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

給你一個用字符數組 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,如果連續n+1個位置沒有重復的任務,就不需要待命,所以需不需要待命,由次數最多的任務決定。

2,我們假設,次數最多的任務的次數為maxCnt,可以建模一個二維表格,寬度為n+1,高度為maxCnt

golang中怎么利用leetcode 實現一個任務調度器

3,分兩種情況:

A,不同的任務可以將(maxCnt-1)*(n+1)的位置填滿,這個時候,沒有空的位置,也就是沒有任務需要待命

B,不同的任務,不能將(maxCnt-1)*(n+1)的位置填滿,這個時候,空的位置,就是待命狀態。

4,針對情況A,說明不需要待命,所以需要時間就是任務數

5,針對情況B,不考慮maxCnt-1行,第maxCnt行的任務數,就是次數為maxCnt的任務數量maxCntNum。所以總的次數為(maxCnt-1)*(n+1)+maxCntNum

倒數第二行開始,按照反向列優先的順序(即先放入靠左側的列,同一列中先放入下方的行),依次放入每一種任務,并且同一種任務需要連續地填入。對于任意一種任務而言,一定不會被放入同一行兩次(否則說明該任務的執行次數大于等于maxCnt),并且由于我們是按照列優先的順序放入這些任務,因此任意兩個相鄰的任務之間要么間隔 n(例如上圖中位于同一列的相同任務),要么間隔 n+1

6,結果是兩者中較大者

代碼實現

func leastInterval(tasks []byte, n int) int {   m:=make(map[byte]int)   for _,t:=range tasks{       m[t]++   }   maxCnt,maxCntNum:=0,0   for _,c:=range m{       if c>maxCnt{           maxCnt=c           maxCntNum=1       }else if c==maxCnt{           maxCntNum++       }   }   if num:=(maxCnt-1)*(n+1)+maxCntNum;num>len(tasks){       return num   }   return  len(tasks)}

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

洪洞县| 饶阳县| 五常市| 南宁市| 延长县| 长沙市| 黔西| 宣化县| 巴彦县| 莱州市| 山西省| 台中县| 泸定县| 兴仁县| 鹿泉市| 廉江市| 红河县| 永和县| 临颍县| 汕头市| 开化县| 怀集县| 德化县| 恭城| 盐城市| 定襄县| 英吉沙县| 库伦旗| 泸定县| 北安市| 泰州市| 藁城市| 滦南县| 花莲县| 正安县| 韶山市| 峨边| 古交市| 平塘县| 延边| 白水县|