华为OD面试手撕代码:安排工作以达到最大收益

题目:安排工作以达到最大收益

*可以通过双指针算法, 一个指针指向工作,一个指针指向工人, 指向工人的指针是序号最小的, 能够承受某一工作的工人,这样, 不断增加指向工作的指针, 就能获得每个工人可以干的收益最大的工作。 具体: 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
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一剑破天门

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值