力扣1383.最大的团队表现值
-
排序 + 堆
- 与2542.类似,差别在于本题选用<=K个数即可
- 代码差别体现于不需要预处理前K的数的答案值
-
class Solution { const int N = 1e9 + 7; public: int maxPerformance(int n, vector<int>& speed, vector<int>& efficiency, int k) { vector<int> idx(n); iota(idx.begin(),idx.end(),0); ranges::sort(idx,[&](int i,int j){ return efficiency[i] > efficiency[j];}); priority_queue<int,vector<int>,greater<>> pq; long long sum = 0; long long ans = 0; for(int i=0;i<n;i++) { int x = speed[idx[i]]; sum += x; pq.push(x); //超过K个才进行处理 if(--k < 0) { sum -= pq.top(); pq.pop(); } ans = max(ans,sum * efficiency[idx[i]]); } return ans % N; } };