今天遇到一个题:假设有m个线程,同时解决n个任务,求最短解决时间。
输入示例:3 (3个线程)
1 4 2 3 5 (各个任务的解决时间)
输出示例:5 (全部任务最短解决时间)
求解决一下给个代码,最好是java的,感谢感谢了
今天遇到一个题:假设有m个线程,同时解决n个任务,求最短解决时间。
输入示例:3 (3个线程)
1 4 2 3 5 (各个任务的解决时间)
输出示例:5 (全部任务最短解决时间)
求解决一下给个代码,最好是java的,感谢感谢了
public static void main(String[] args) {
// Scanner scanner = new Scanner(System.in);
int[] arrs = {1,2,3,4,5};
Arrays.sort(arrs);
int n= arrs.length;
int m = 3;
int sum = Arrays.stream(arrs).sum();
int ave = sum%m == 0? sum/m:sum/m + 1 ;
Map<Integer,List<Integer>> map = new HashMap<>();
Map<Integer,Integer> sumMap = new HashMap<>();
int step = 1;
int j=0;
for (int i=arrs.length-1;i>=0;){
Integer preSum = sumMap.getOrDefault(j, 0);
if (preSum == 0 || preSum+arrs[i]<= ave){
List<Integer> list = map.getOrDefault(j, new ArrayList<>());
list.add(arrs[i]);
map.put(j,list);
sumMap.put(j,preSum+arrs[i]);
i--;
}
j=j+step;
if(j>= m-1){
step = -1;
}
if (j<= 0){
step = 1;
}
}
System.out.println(map);
System.out.println(sumMap);
System.out.println("耗时:"+ sumMap.values().stream().max(Integer::compareTo).get());
}