力扣
解题思路:
1.将工作难度和收益进行映射 , 按照工作难度升序排列。
2.将工人的完成难度按升序排列。
3.从第一个工人开始先找到自己的最大能获取的最大利润,因为工人经过了排序,那么后面的工人只需要在前面一个工人的基础上向后找,找到自己的最大利润就可以了 ,以此类推。
class Solution {
public:
static bool compare(pair<int,int>& x , pair<int,int>& y)
{
return x.first < y.first;
}
int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker)
{
int sz = difficulty.size();
int ret_sz = worker.size();
vector<pair<int,int>> diftopro ; // 能力 和 工资的映射
for(int i = 0 ; i < sz; ++i)
{
diftopro.push_back(make_pair(difficulty[i] , profit[i]));
}
sort(diftopro.begin() , diftopro.end() , compare); //按照能力升序
sort(worker.begin() , worker.end()); // 按照能力升序
int j = 0;
int maxpf = 0;
int sum = 0;
for(int i = 0 ; i < ret_sz ;++i)
{
while(j < sz && worker[i] >= diftopro[j].first) //能力 >= 难度
maxpf = max(maxpf , diftopro[j++].second); //找到最大的利润
sum += maxpf;
}
return sum;
}
};