1. 程式人生 > 實用技巧 >跟誰學筆試題-最短執行時間

跟誰學筆試題-最短執行時間

思路:

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