826. 安排工作以达到最大收益
思路:贪心、排序。先对工作按照难度递增的顺序排序,对工人也是。然后每次记录当前工人j所能接受的工作[0,i]里,薪水最大的best。
class Solution {
public:
int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker) {
int n=difficulty.size();
int m=worker.size();
pair<int,int> p[n];
for(int i=0;i<n;i++){
p[i]={difficulty[i],profit[i]};
}
sort(p,p+n);
sort(worker.begin(),worker.end());
int sum=0;
int best=0;
int i=0,j=0;
while(j<m){
while(i<n&&worker[j]>=p[i].first){
best=max(best,p[i++].second);
}
sum+=best;
j++;
}
return sum;
}
};