1383. 最大的团队表现值


1383. 最大的团队表现值

示例 1:

输入:n = 6, speed = [2,10,3,1,5,8], efficiency = [5,4,3,9,7,2], k = 2
输出:60
解释:
我们选择工程师 2(speed=10 且 efficiency=4)和工程师 5(speed=5 且 efficiency=7)。他们的团队表现值为 performance = (10 + 5) * min(4, 7) = 60 。


示例 2:

输入:n = 6, speed = [2,10,3,1,5,8], efficiency = [5,4,3,9,7,2], k = 3
输出:68
解释:
此示例与第一个示例相同,除了 k = 3 。我们可以选择工程师 1 ,工程师 2 和工程师 5 得到最大的团队表现值。表现值为 performance = (2 + 10 + 5) * min(5, 4, 7) = 68 。
示例 3:

输入:n = 6, speed = [2,10,3,1,5,8], efficiency = [5,4,3,9,7,2], k = 4
输出:72


提示:

1 <= n <= 10^5
speed.length == n
efficiency.length == n
1 <= speed[i] <= 10^5
1 <= efficiency[i] <= 10^8
1 <= k <= n

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-performance-of-a-team
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路
对 speed 和 efficiency 同步排序,按照效率降序
遍历,对每一项数据
1. 累加和 sum ,当超过 k 个的数据时,选最小的将其排除
2. 使用优先队列来找到 k 个中最小的数据
3. 效率的最低值就是当前项的效率
4. 计算结果,注意这里不能取余
返回最终结果时取余

作者:ikaruga
链接:https://leetcode-cn.com/problems/maximum-performance-of-a-team/solution/5359-by-ikaruga/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
struct node{
    long long s,e;
} en[100000000+50];
const int MOD = 1e9+7;
class Solution {
public:
    int maxPerformance(int n, vector<int>& speed, vector<int>& efficiency, int k) {
        for(int i = 0;i<n;i++){
            en[i].s = speed[i];
            en[i].e = efficiency[i];
        }
        sort(en,en+n,[](node a,node b){
            return a.e>b.e;
        });
        for(int i = 0;i<n;i++){
            cout<<en[i].s<<" "<<en[i].e<<endl;
        }
        priority_queue<long long, vector<long long >, greater<long long > > q; // 从小到大的优先队列 
        while(!q.empty()) q.pop();
        long long sum = 0;
        long long  ret = 0;
        for(int i = 0;i<n;i++){
            sum+=en[i].s;
            q.push(en[i].s);
            while(q.size()>k){
                sum-=q.top();
                q.pop();
            } 
            ret = max(ret,sum*en[i].e);
        }
        return ret%MOD ;
    }
};

文章作者: anlen123
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 anlen123 !
 上一篇
1376. 通知所有员工所需的时间 1376. 通知所有员工所需的时间
1376. 通知所有员工所需的时间公司里有 n 名员工,每个员工的 ID 都是独一无二的,编号从 0 到 n - 1。公司的总负责人通过 headID 进行标识。 在 manager 数组中,每个员工都有一个直属负责人,其中 manager
2020-05-07 anlen123
下一篇 
1155. 掷骰子的N种方法 1155. 掷骰子的N种方法
1155. 掷骰子的N种方法这里有 d 个一样的骰子,每个骰子上都有 f 个面,分别标号为 1, 2, …, f。 我们约定:掷骰子的得到总点数为各骰子面朝上的数字的总和。 如果需要掷出的总点数为 target,请你计算出有多少种不同的组合
2020-05-07 anlen123
  目录