首先思路就是枚举效率的最小值,可以先对效率从小到大排序。
对于每次选择一个效率值,必须找到后面的(k-1)大的速率值,可以用堆维护。
因为最多可以选择k个,只有后k个最大的效率值,才可以这样,其他情况必选k个。
class Solution {
public:
const int mod=1e9+7;
int maxPerformance(int n, vector<int>& s, vector<int>& e, int k) {
pair<int,int>p[n+2];
long long sum=0,ans=0;
for(int i=1;i<=n;i++)p[i]={-e[i-1],-s[i-1]};
sort(p+1,p+1+n);
priority_queue<int>q;
for(int i=1;i<=n;i++){
if(i<=k){
sum-=p[i].second;
q.push(p[i].second);
ans=max(ans,sum*(-p[i].first));
}else{
int t=q.top();
q.pop();
sum+=t-p[i].second;
q.push(p[i].second);
ans=max(ans,sum*(-p[i].first));
}
}
return ans%mod;
}
};
京公网安备 11010502036488号