• 跟谁学笔试题-最短执行时间


    思路:

      • M台服务器,每一次执行完后,都从剩余的任务中,选择需要执行时间最长的;
      • 而在 M台 服务器中,每一次将其中最先执行完的任务,执行掉,保证至少能空出一台服务器;
      • 每一台服务器都减去这个时间,最终结果累加这个时间。不断的重复即可。

    import java.util.Arrays;
    import java.util.Scanner;
    
    public class genShuiXue {
        public static void main(String[] args) {
            Scanner cin = new Scanner(System.in);
            int M = cin.nextInt();
            int N = cin.nextInt();
            int[] nums = new int[N];
            for(int i = 0; i < N; i++) nums[i] = cin.nextInt(); //处理输入数据
            Arrays.sort(nums); //输入数组升序排序
            int idx = N - 1; //取值的下标
            int count = 0; //累计时间
            int[] tmp = new int[M]; // M台服务器的辅助数组
            while(idx >= 0){
                for(int i = 0; i < M; i++){
                    if(tmp[i] == 0){ //时间片执行完后,就往服务器中加入任务
                        if(idx < 0) break;
                        tmp[i] = nums[idx--]; //加入的任务,是从剩余任务中,时间最长的加入
                    }
                }
                Arrays.sort(tmp); // 对服务器数组排序
                int consume = tmp[0]; //将服务器中,最先执行完的任务取出
                count += consume; //将这个时间加入到累计时间中
                for(int i = 0; i < M; i++){
                    tmp[i] -= consume; //服务器中,每一台服务器都执行掉这个时间长度,一定会有一台空出来
                }
            }
            Arrays.sort(tmp); //所有任务都载入完服务器中了
            count += tmp[M-1]; // 取服务器中最大的时间,保证所有的任务都能执行完
            System.out.println(count);
        }
    }

    结果:提交 OJ,显示 AC。

  • 相关阅读:
    SqlParameter构造函数让人大吃一斤
    ASP.NET的图片上传和显示
    不去琢磨什么CSS后代选择器之类的鸟玩意了
    datatable里添加一个标识列
    提高工作效率
    调试无法命中断点问题
    离DBA还有多远?
    开发守则
    方法或函数也可以用泛型
    母版页访问内容页
  • 原文地址:https://www.cnblogs.com/luo-c/p/13938771.html
Copyright © 2020-2023  润新知