如需轉載請留言。
題目如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int maxQps= Integer.valueOf(in.nextLine()); final String[] rtList = in.nextLine().split(","); final int requestNum = Integer.valueOf(in.nextLine()); final int threadNum = Integer.valueOf(in.nextLine()); System.out.println(doneTime(maxQps, rtList, requestNum, threadNum)); } /** * 如果使用最優的最大吞吐量負載均衡算法,按照最優模型多久能夠處理完所有請求,單位毫秒。 * @return */ static long doneTime(int maxQps,String[] rtList,int requestNum,int threadNum) { //TODO return 0; } }
編譯器版本: Java 1.8.0_66 請使用標准輸入輸出(System.in, System.out);已禁用圖形、文件、網絡、系統相關的操作,如java.lang.Process , javax.swing.JFrame , Runtime.getRuntime;不要自定義包名稱,否則會報錯,即不要添加package answer之類的語句;您可以寫很多個類,但是必須有一個類名為Main,並且為public屬性,並且Main為唯一的public class,Main類的里面必須包含一個名字為'main'的靜態方法(函數),這個方法是程序的入口
時間限制: 30S (C/C++以外的語言為: 32 S) 內存限制: 200M (C/C++以外的語言為: 712 M)
輸入:輸入數據包含5行數字: 第一行是每台broker的極限QPS 第二行是broker rt列表,用逗號分割,幾個rt表示幾個broker 第三行是消息生產請求總數 第四行是最大並發線程數
輸出:按照最大吞吐量執行完所有請求,需要耗時多少毫秒
輸入范例:200 1,1,1,10,10 5000 10
輸出范例:5000
首先,我們要弄明白幾個概念。第一個,什么叫最大吞吐量負載均衡算法。
而且,如題所需,我們建立在“最優模型”下求解。所以,我們忽略帶寬,節點信息等的限制,進入理想情況。
接下來,我們需要解決的問題,就是在理想情況下,qps(query per second)和threadNum(線程數量),rt(響應時間)之間的關系。
上面的資料鏈接里,那張吞吐量與qps,threadNum的關系,以及qps=threadNum/rt,對本題都很關鍵。
那么答案已經顯而易見了。我們也能理清題目中所有已知條件對最終結果的影響。那碼代碼就是分分鍾的事。
import java.util.Scanner; /** * @author Feng_zhulin * @since 17/3/20 */ public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int maxQps= Integer.valueOf(in.nextLine()); final String[] rtList = in.nextLine().split(","); final int requestNum = Integer.valueOf(in.nextLine()); final int threadNum = Integer.valueOf(in.nextLine()); System.out.println(doneTime(maxQps, rtList, requestNum, threadNum)); } /** * 如果使用最優的最大吞吐量負載均衡算法,按照最優模型多久能夠處理完所有請求,單位毫秒。 * @return */ static long doneTime(int maxQps,String[] rtList,int requestNum,int threadNum) { //TODO int qpsSum = 0; for (String rtString : rtList) { int singleMaxQps = threadNum * 1000 / Integer.valueOf(rtString); if (singleMaxQps > maxQps) { qpsSum += maxQps; }else { qpsSum += singleMaxQps; } } return requestNum / qpsSum * 1000; } }
簡單的寫法,隨手碼的,求不噴。
最后驗證一下:
Feng_zhulindeMacBook-Pro:Desktop Feng_zhulin$ java Main 200 12,11,13,20,50 40000 8 41000
Feng_zhulindeMacBook-Pro:Desktop Feng_zhulin$ java Main 200 1,1,1,10,10 5000 10 5000