(隊列) LeetCode621. 任務調度器

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

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

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

示例 1:
輸入: tasks = ["A","A","A","B","B","B"], n = 2
輸出: 8
執(zhí)行順序: A -> B -> (待命) -> A -> B -> (待命) -> A -> B.
注:
任務的總個數(shù)為 [1, 10000]。
n 的取值范圍為 [0, 100]。

方法一 排序
思路:
1、將任務按頻率排序
2、n+1個任務為一輪,每輪中任務不重復
時間復雜度O(time)
空間復雜度O(1)

let leastInterval = function(tasks, n){
    let last = 0,
        result = 0,
        arr = new Array(26);
    arr.fill(0);
    tasks.forEach(item => {
        let index = item.charCodeAt() - 'A'.charCodeAt();
        arr[index] += 1
    })  
    //如果有剩余任務
    while(arr[0] > 0){
        last = 0;
        //每輪任務重新排序
        arr.sort((a, b) => b - a)  
        for(let i = 0; i < n + 1; i++){
            if(arr[i] > 0){
                arr[i] = arr[i] - 1;
            }else{
                //最后一輪多余的時間
                last += 1;
            }
            result += 1;             
        }
    }
    return result - last;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 專業(yè)考題類型管理運行工作負責人一般作業(yè)考題內容選項A選項B選項C選項D選項E選項F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,720評論 0 13
  • 數(shù)據(jù)結構與算法 1.算法的有窮性是指( )。答案:A A)算法程序的運行時間是有限的 B)算法程序所處理的數(shù)據(jù)量是...
    織夢學生閱讀 3,704評論 1 15
  • 在C語言中,五種基本數(shù)據(jù)類型存儲空間長度的排列順序是: A)char B)char=int<=float C)ch...
    夏天再來閱讀 4,092評論 0 2
  • --- layout: post title: "如果有人問你關系型數(shù)據(jù)庫的原理,叫他看這篇文章(轉)" date...
    藍墜星閱讀 919評論 0 3
  • 選擇題部分 1.(),只有在發(fā)生短路事故時或者在負荷電流較大時,變流器中才會有足夠的二次電流作為繼電保護跳閘之用。...
    skystarwuwei閱讀 14,436評論 0 7

友情鏈接更多精彩內容