LeetCode 1383. 最大的团队表现值

https://leetcode-cn.com/problems/maximum-performance-of-a-team/

一开始想的是dp,发现内存太大了,不太可能。

后来往排序预处理方面想,思路就来了,因为是 「所有工程师速度的和」乘以他们「效率值中的最小值」,所以只需要维护前面的前k个最大组成的和,用一个堆组成。最低的效率就是当前的,因为排过序了。如果不排序,就很难维护最低效率,因为前面的不时有因为速度不够大通过堆删去,那怎样找倒数第二的效率呢,很难。所以先按照效率由大到小排序,当前的就是效率最低的。

class Solution {
public:
    
    struct Node{
        int speed;
        int efficiency;
    };
    Node nodes[100005];
    
    static bool cmp(const Node &a,const Node &b){
        if(a.efficiency!=b.efficiency){
            return a.efficiency>b.efficiency;
        }
        return a.speed>b.speed;
    }
    
    int maxPerformance(int n, vector<int>& speed, vector<int>& efficiency, int k) {
        
        for(int i=0;i<n;i++){
            nodes[i].speed=speed[i];
            nodes[i].efficiency=efficiency[i];
        }
        sort(nodes,nodes+n,cmp);
        
        priority_queue<int,vector<int>,greater<int> > q;
        long long sum=0;
        long long ans=0;
        
        for(int i=0;i<n;i++){
            q.push(nodes[i].speed);
            sum+=nodes[i].speed;
            if(q.size()>k){
                int temp=q.top();
                q.pop();
                sum-=temp;
            }
            
            ans=max(ans,sum*nodes[i].efficiency);
        }
        return ans%(1000000000 + 7);
    }
    
};

 

发布了141 篇原创文章 · 获赞 30 · 访问量 13万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览