ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

算法题解----leetcode.826.安排工作以达到最大收益

2021-08-26 01:01:03  阅读:175  来源: 互联网

标签:map leetcode.826 int 题解 收益 worker ---- 工人 mx


先来吐槽一件事,今天我在配置tomcat的时候环境变量整了半天才弄好,然后又要整合idea和javaweb,

最坑爹的来了,我之前用的是idea社区版本,没有javaee,我也不会配置,就很烦,我又没钱买旗舰版,

然后下了个edu版,还是不太行,总之忙活了一两个小时还没搞好,心态小炸,

原本我还在为我终于看不到html css javascript那些我一看到就想吐的东西而窃喜(没有其他的意思,就是我是真的不喜欢学前端,看到<>标签莫名想吐hh)。

言归正传,我们来看看今天的题解.

题目描述:

 

有一些工作:difficulty[i] 表示第 i 个工作的难度,profit[i] 表示第 i 个工作的收益。

现在我们有一些工人。worker[i] 是第 i 个工人的能力,即该工人只能完成难度小于等于 worker[i] 的工作。

每一个工人都最多只能安排一个工作,但是一个工作可以完成多次。

举个例子,如果 3 个工人都尝试完成一份报酬为 1 的同样工作,那么总收益为 $3。如果一个工人不能完成任何工作,他的收益为 $0 。

我们能得到的最大收益是多少?

 

示例:

 

输入: difficulty = [2,4,6,8,10], profit = [10,20,30,40,50], worker = [4,5,6,7]
输出: 100 
解释: 工人被分配的工作难度是 [4,4,6,6] ,分别获得 [20,20,30,30] 的收益。

 

提示:

 

1 <= difficulty.length = profit.length <= 10000
1 <= worker.length <= 10000
difficulty[i], profit[i], worker[i]  的范围是 [1, 10^5]

 

 

这题我的思路是这样的:

开一个map,key存的是困难度,value存的是相应困难度的最大收益,这里因为它有可能两件工作困难度相同但是收益不同,我们肯定取最大值。

然后把工人的能力排个序,声明一个迭代器指向建好的map的begin()位置,遍历排过序的工人数组,这时候要用一个小技巧,设置一个mx存储

map里面困难度小于等于工人能力值的工作的最大收益,这样它的时间复杂度只有O(n+m),再加上之前我们排序的时间复杂度,这题的时间复杂度就是O(nlogn)

范围是10^5,完全可以过,看看代码~

 

class Solution {
public:

    int maxProfitAssignment(vector<int>& difficulty, vector<int>& profit, vector<int>& worker) {
        map<int,int> m;
        for(int i=0;i<difficulty.size();i++)
        {
            if(m.find(difficulty[i]) == m.end())
            m.insert(make_pair(difficulty[i],profit[i]));
            else if(m.find(difficulty[i])->second<profit[i])
            m.find(difficulty[i])->second = profit[i];
        }
        sort(worker.begin(),worker.end());
        int res = 0;
        int mx = 0;
        map<int,int>::iterator iter = m.begin();
        for(int i=0;i<worker.size();i++)
        {
            while(iter!=m.end() && worker[i]>=(*iter).first) 
            {
              mx = max(mx,(*iter).second);
              iter++;  
            }
            res += mx;
        }
        return res;
    }
};

 

标签:map,leetcode.826,int,题解,收益,worker,----,工人,mx
来源: https://www.cnblogs.com/apakchan/p/15187663.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有