题目:

代码(首刷看解析):
class Solution {
public:
long long totalCost(vector<int>& costs, int k, int candidates) {
// 优先队列,升序
priority_queue<int, vector<int>, greater<int>> frontQue;
priority_queue<int, vector<int>, greater<int>> backQue;
int n = costs.size();
for(int i=0;i<candidates;++i) frontQue.push(costs[i]);
for(int i=n-1;i>=n-candidates&&i>=candidates;--i) backQue.push(costs[i]);//保证n-canditates不是负数
int lcursor=candidates,rcursor=n-candidates-1;
long long sum = 0;
while(k){
long long lMin=INT_MAX,rMin=INT_MAX;
if(!frontQue.empty()) lMin = frontQue.top();
if(!backQue.empty()) rMin = backQue.top();
if(lMin<=rMin){
frontQue.pop();
if(lcursor<=rcursor) frontQue.push(costs[lcursor++]);
sum+=lMin;
}else{
backQue.pop();
if(rcursor>=lcursor) backQue.push(costs[rcursor--]);
sum+=rMin;
}
k--;
}
return sum;
}
};