Shortest Job First

一個處理器要處理一堆request,一次只能處理一條,如果它有幾個積壓著的requests,它會先執(zhí)行持續(xù)時間短的那個;對于持續(xù)時間相等的requests,先執(zhí)行最早到達(dá)處理器的request。問平均每個request要等多久才能被處理。input:requestTimes[],每個request到達(dá)處理器的時間; durations[] 每個request要處理的持續(xù)時間。 兩個數(shù)組是一一對應(yīng)的,并已按requestTimes[] 從小到大排序過。

Screen Shot 2017-09-13 at 17.09.28.png
import java.util.*;
public class Solution {
    static class Process
    {
        int arrTime;
        int exeTime;
        public Process(int arrTime, int exeTime)
        {
            this.arrTime = arrTime;
            this.exeTime = exeTime;
        }
    }
    public static double SJL(int[] req, int[] dur)
    {
        if(req == null || req.length == 0) return 0;
        PriorityQueue<Process> queue = new PriorityQueue<>(new Comparator<Process>()
        {
            @Override
            public int compare(Process a, Process b)
            {
                if(a.exeTime == b.exeTime) return a.arrTime - b.arrTime;
                else return a.exeTime - b.exeTime;
            }
        });
        int t = 0, sum = 0, i = 0;
        while(i < req.length || !queue.isEmpty())
        {
            if(queue.isEmpty())
            {
                queue.offer(new Process(req[i], dur[i]));
                t = req[i];
                i++;
            }
            else
            {
                Process p = queue.poll();
                sum += (t - p.arrTime);
                t += p.exeTime;
                while(i < req.length && req[i] <= t)
                {
                    queue.offer(new Process(req[i], dur[i]));
                    i++;
                }
            }
        }
        return (sum + 0.0) / req.length;
    }
    public static void main(String[] args)
    {
        int[] req = {1, 3, 3, 6, 6, 6, 7};
        int[] dur = {2 ,2 ,3 ,2, 4, 4, 2};
        System.out.println(SJL(req, dur));
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 11,145評論 6 13
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,268評論 25 708
  • 先給答案:大多數(shù)手機(jī)是可以拍到光軌照片的。(昨天答了一道題,今天整理分享出來) 01 首先,我們來分析光軌照片的原...
    朱子先生的攝影思維閱讀 27,039評論 20 173
  • 寫在前面的話:今天開始寫寫東西,記錄一下光陰。希望自己能堅持,無論是個人感受還是技術(shù)討論。 結(jié)點:寫在2016已經(jīng)...
    靈智上人閱讀 170評論 0 0