網易2017春招筆試Java程式碼
阿新 • • 發佈:2019-02-14
一種雙核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);
}
}