题目地址
https://leetcode.cn/problems/most-profit-assigning-work/description
解题思路
解法一:排序+遍历
class Solution {
public int maxProfitAssignment(int[] difficulty, int[] profit, int[] worker) {
int len = difficulty.length;
//由于难度和收益是一一对应的 我们将他放到一个二维数组中去 这样我们就可以通过难度或者收益进行排序
int[][] jobs = new int[len][2];
for(int i=0;i<len;i++){
jobs[i][0]=difficulty[i];
jobs[i][1]=profit[i];
}
//对二维数组的难度进这个维度行排序
Arrays.sort(jobs,(a,b)->a[0]-b[0]);
// 对工作难度进行排序
Arrays.sort(worker);
int maxProfit=0;
int ans =0;
for (int w : worker) {
for (int[] job : jobs) {
if (job[0]<=w){
maxProfit=Math.max(job[1],maxProfit);
}
}
ans+=maxProfit;
}
return ans;
}
}
题解二:排序+双指针
class Solution {
public int maxProfitAssignment(int[] difficulty, int[] profit, int[] worker) {
int len = difficulty.length;
//由于难度和收益是一一对应的 我们将他放到一个二维数组中去 这样我们就可以通过难度或者收益进行排序
int[][] jobs = new int[len][2];
for(int i=0;i<len;i++){
jobs[i][0]=difficulty[i];
jobs[i][1]=profit[i];
}
//对二维数组的难度进这个维度行排序
Arrays.sort(jobs,(a,b)->a[0]-b[0]);
// 对工作难度进行排序
Arrays.sort(worker);
int maxProfit=0;
int point=0;
int ans =0;
for (int w : worker) {
while (point < len && jobs[point][0] <= w) {
maxProfit = Math.max(maxProfit, jobs[point++][1]);
}
ans+=maxProfit;
}
return ans;
}
}