leetcode621——Task Scheduler

題目大意:給出字符數組表示任務列表,26個大寫字母代表26種任務。給出整數n,執行相同任務之間必須有長度爲n的冷凍時間。CPU在每個單位時間可以選擇執行任務或者待命,求完成這些任務所需要的最短時間。

分析:方法一:貪心法。貪心策略:儘早安排出現次數較多的任務。因爲如果把他們留在後面,就會造成大量的冷凍時間。做法:每一輪選擇剩餘出現次數最多的不超過n+1個任務來執行,這樣保證了冷凍時間。在每一輪中按照任務出現次數降序的順序執行。

代碼:

方法一:

class Solution {
public:
    int leastInterval(vector<char>& tasks, int n) {
        vector<int> m(26);
        for(char c : tasks){
            m[c - 'A']++;
        }
        sort(m.begin(),m.end());
        int time = 0;
        while(m[25]){ //當剩餘次數最多的任務次數不爲0,就需要新一輪安排
            for(int i = 0;i <= n;i++){  //每輪最多n+1個任務
                if(m[25] == 0) break;
                if(i < 26 && m[25 - i])
                    m[25 - i]--;
                time++;  //執行任務或者待命
            }
            sort(m.begin(),m.end()); //每輪結束都要按任務剩餘次數重排序
        }
        return time;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章