1. 程式人生 > >網易2017春招筆試Java程式碼

網易2017春招筆試Java程式碼

一種雙核CPU的兩個核能夠同時的處理任務,現在有n個已知資料量的任務需要交給CPU處理,假設已知CPU的每個核1秒可以處理1kb,每個核同時只能處理一項任務。n個任務可以按照任意順序放入CPU進行處理,現在需要設計一個方案讓CPU處理完這批任務所需的時間最少,求這個最小的時間。

輸入描述:

輸入包括兩行:
第一行為整數n(1 ≤ n ≤ 50)
第二行為n個整數length[i](1024 ≤ length[i] ≤ 4194304),表示每個任務的長度為length[i]kb,每個數均為1024的倍數。
輸出描述:

輸出一個整數,表示最少需要處理的時間
輸入例子

5
3072 3072 7168 3072 1024
輸出例子:

9216

程式碼

public class NeteasyMinSubstring {

    public static int minSubstring(ArrayList<Integer> list){
        int sum1 = 0;
        int sum2 = 0;
        //從大到小排序
        Collections.sort(list,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1, Integer o2) {
                return
o2-o1; } }); //分別給兩臺處理器分配任務,原則哪個任務少給哪個 for(int i=0;i<list.size();i++){ if(sum1>=sum2){ sum2 += list.get(i); }else{ sum1 += list.get(i); } } //兩個處理器全部完成所需最小時間 int sum = Math.max(sum1, sum2); return
sum; } public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<Integer>(); for(int i=0;i<10;i++){ list.add((int) Math.round(Math.random()*10*1024)); } System.out.println("輸入陣列:"+list.toString()); int pay = minSubstring(list); System.out.println("最小時間:"+pay); } }