0
点赞
收藏
分享

微信扫一扫

LeetCode826. 安排工作以达到最大收益

夕颜合欢落 2022-03-21 阅读 52
java后端

力扣

解题思路:

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;
    }
};
举报

相关推荐

0 条评论