本质上,就是一个遍历所有的effecient,找到满足最小effecient的所有speed中,最多k个数字的最大值。
要找k个最大值,最方便的就是开个小顶堆,然后只存k个数,新来一个k+1,先pop最小的,然后再放入k+1个数。
bool cmp(const pair<int, int>& a, const pair<int, int>& b){
if (a.second>b.second){
return true;
}
else{
return false;
}
}
class Solution {
public:
// 最多k个人,也就是说可以小于k个人。
// 判断所有efficiency的情况
int maxPerformance(int n, vector<int>& speed, vector<int>& efficiency, int k) {
vector<pair<int, int>> cnt;
for(int i=0;i<n;i++){
pair<int, int> temp(speed[i], efficiency[i]);
cnt.push_back(temp);
}
sort(cnt.begin(), cnt.end(), cmp);
// for first k
long res = 0;
long mod = 1e9+7;
long sum = 0;
priority_queue<int, vector<int>, greater<int> > myqueue;
// for k+1, ..., end
for(int i=0;i<n;i++){
if (i<k){
myqueue.push(cnt[i].first);
sum += cnt[i].first;
res = max(res, sum*cnt[i].second);
}
else{
sum += cnt[i].first-myqueue.top();
myqueue.pop();
myqueue.push(cnt[i].first);
res = max(res, sum*cnt[i].second);
}
}
return res%mod;
}
};
本文介绍了一种基于效率和速度的团队性能优化算法,通过小顶堆数据结构筛选出最多k个成员,以达到团队整体性能的最大化。算法首先对成员的效率和速度进行排序,然后使用小顶堆维护k个速度值,每次迭代更新速度总和和当前最大性能。
1108

被折叠的 条评论
为什么被折叠?



