题目描述:
项目组共有N个开发人员,项目经理接到了M个独立的需求,每个需求的工作量不同,且每个需求只能由一个开发人员独立完成,不能多人合作。假定各个需求直接无任何先后依赖关系,请设计算法帮助项目经理进行工作安排,使整个项目能用最少的时间交付。
解决:使用贪心算法,先将工作量最大的分配出去
public class ProjectSchedule {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] split = scanner.nextLine().split(" ");
List<Integer> list = new ArrayList<>();
for (int i = 0; i < split.length; i++) {
list.add(Integer.parseInt(split[i]));
}
int workerNum = scanner.nextInt();
ProjectSchedule projectSchedule = new ProjectSchedule();
projectSchedule.schedule(workerNum, list);
}
private void schedule(int workerNum, List<Integer> list) {
Collections.sort(list);
//记录每个开发者的工作量 默认都为0
int[] ints = new int[workerNum];
//循环分配需求
for (int i = list.size()-1; i >=0 ; i--) {
//查找第一个工作量最少的开发者
int j = findWokerMin(ints);
//将需求分配给他
ints[j] += list.get(i);
}
int maxTime = 0;
for (int i = 0; i <workerNum; i++) {
if(ints[i] > maxTime) {
maxTime = ints[i];
}
}
System.out.println(maxTime);
}
private int findWokerMin(int[] ints) {
int minWorks = ints[0];
int index = 0;
for (int i = 0; i < ints.length; i++) {
if (ints[i] < minWorks) {
minWorks = ints[i];
index = i;
}
}
return index;
}
}