• 621. Task Scheduler


    一、题目

      1、审题

      

      2、分析

        输入为任务数组,且相同的任务只有在距离 n 之后才能,才能再做。求最少处理时间。

    二、解答

      

      ①  首先统计出数组中,出现字符最多的次数 max, 出现次数最多的字符有几种 maxCount;

      ② 将出现次数最多的字符作为批次的划分,共有 max - 1 批空槽等待填写任务。

      ③ 每一批空槽有 n - (maxCount - 1) 个空槽位置

      ④ 除了已填写的最大批次任务还剩下的作业数 tasks.length - max * maxCount

      ⑤ 若 emptySlots > availableTasks 意味着没有足够的任务来填满空槽。则需要的处理时间为,返回总槽数 + 填写的最大任务数

      ⑥ 若 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;
        }
  • 相关阅读:
    MySql触发器简介
    MySQL存储过程
    MySQL自定义函数
    MySql视图
    MySQL增删改
    MySQL内联和外联查询
    MySql运算符
    SQL scripts
    Adding Swagger to Web API project
    Unable to get setting value Parameter name: profileName
  • 原文地址:https://www.cnblogs.com/skillking/p/10931103.html
Copyright © 2020-2023  润新知