题目:
代码(首刷看解析 2023年11月17日):
class Solution {
public:
long long maxScore(vector<int>& nums1, vector<int>& nums2, int k) {
int n = nums1.size();
typedef pair<int,int> pii;// int有序对别名
vector<pii> ord;
for(int i = 0;i < n; i++) ord.push_back(pii(-nums2[i],i));
sort(ord.begin(),ord.end());//从大到小排序
priority_queue<int, vector<int> ,greater<int>> pq;
// 数字小的优先级大的优先队列,底层的容器是vector
long long sm = 0;
for( int i = 0;i < k; i++){
int j = ord[i].second;
pq.push(nums1[j]);
sm += nums1[j];
}
long long ans = nums2[ord[k-1].second] * sm;
for(int i = k; i<n; i++){
int j = ord[i].second;
pq.push(nums1[j]);
sm+= nums1[j];
//去掉小根堆最小的那个数
int x = pq.top(); pq.pop();
sm -=x;
ans = max(ans,nums2[j]*sm);
}
return ans;
}
};