题目:安排工作以达到最大收益
*可以通过双指针算法, 一个指针指向工作,一个指针指向工人, 指向工人的指针是序号最小的, 能够承受某一工作的工人,这样, 不断增加指向工作的指针, 就能获得每个工人可以干的收益最大的工作。 具体: 1、先把工作难度数组和工作收益数组合并为jobs 2、再对jobs进行升序排序,对工人数组也进行升序排序 3、While循环作用是找到能匹配工作难度的工人 4、如果没有能胜任的工人就直接退出 5、如果有胜任的工人j,为了能使获取到最大的收益所以,先把以前算的每个人的收益减掉后, 再加上当前最大的收益,就是最后的结果*/
import java.util.*;
public class Main {
public static class Work {
public int diffi;//工作难度
public int profit;//工作收益
public Work(int d, int p) {
diffi = d;
profit = p;
}
}
public static int calc(int[] difficulty, int[] profit, int[] worker) {
int n = difficulty.length;//n个工作
int m = worker.length;//m个人
Work[] jobs = new Work[n]; // 构建工作数组
for (int i = 0; i < n; i++) {
jobs[i] = new Work(difficulty[i], profit[i]);
}
// 将工作根据工作难度进行升序
Arrays.sort(jobs, (a, b) -> a.diffi - b.diffi);
// 工人也根据能力进行升序
Arrays.sort(worker);
// top用来保存某一工作难度下得最大收益
in