621. Task Scheduler

1、題目數組

  一、審題spa

  

  二、分析code

    輸入爲任務數組,且相同的任務只有在距離 n 以後才能,才能再作。求最少處理時間。blog

 

2、解答ast

  

  ①  首先統計出數組中,出現字符最多的次數 max, 出現次數最多的字符有幾種 maxCount;class

  ② 將出現次數最多的字符做爲批次的劃分,共有 max - 1 批空槽等待填寫任務。im

  ③ 每一批空槽有 n - (maxCount - 1) 個空槽位置統計

  ④ 除了已填寫的最大批次任務還剩下的做業數 tasks.length - max * maxCountimg

  ⑤ 若 emptySlots > availableTasks 意味着沒有足夠的任務來填滿空槽。則須要的處理時間爲,返回總槽數 + 填寫的最大任務數di

  ⑥ 若 emptySlots <  availableTasks 意味着有足夠的任務填寫槽。剩下的任務能夠足夠分開添加在各個槽批次的末尾。則須要的處理時間爲 tasks.length

    public int leastInterval(char[] tasks, int n) {
        int[] counter = new int[26];
        int max = 0;    // 出現的字符最多的次數
        int maxCount = 0;    // 統計出現次數最多的字符有幾種種類,eg 3A3B3C。 則爲 2 AB
        for(char task: tasks) {
            counter[task - 'A']++;
            if(max == counter[task - 'A'])
                maxCount++;
            else if(max < counter[task - 'A']) {
                max = counter[task - 'A'];
                maxCount = 1;
            }
        }
        int partCount = max - 1;    // 空槽有幾批
        int partLength = n - (maxCount - 1);    // 每一批空槽有幾個空槽位置
        int emptySlot = partCount * partLength;    // 總的空槽個數
        int availableTasks = tasks.length - max * maxCount;    // 除了 AB 還剩下的做業數
        int idles = Math.max(0, emptySlot - availableTasks);     //  emptySlots > availableTasks 意味着沒有足夠的任務來填滿空槽
        return tasks.length + idles;
    }
相關文章
相關標籤/搜索