zoukankan      html  css  js  c++  java
  • 跟谁学笔试题-最短执行时间

    思路:

      • 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。

  • 相关阅读:
    A query was run and no Result Maps were found for the Mapped Statement 'com.demo.dao.UserDao.check'. It's likely that neither a Result Type nor a Result Map was specified.
    layui监听input内容变动简单粗暴
    Java多线程中
    Java 对象内存分析
    MySQL重做日志
    并查集-Java实现
    java虚拟机类加载机制
    Java的23种设计模式概述
    redo log 有什么作用?
    什么是redo log ?
  • 原文地址:https://www.cnblogs.com/luo-c/p/13938771.html
Copyright © 2011-2022 走看看