priority_queue:
priority_queue
是 C++ 标准库中的一个容器适配器(Container Adapter),它提供了一个实现优先队列数据结构的抽象接口。优先队列是一种特殊的队列,其中的每个元素都有一个关联的优先级值,优先级高的元素会在队列中拥有更高的优先级,因此在取出元素时,优先级高的元素会先被取出。
在 C++ 中,priority_queue
可以用来实现最大堆或最小堆,这取决于比较函数对象的选择。默认情况下,priority_queue
是基于最大堆实现的,即优先级高的元素会排在队列的前面。你可以通过指定不同的比较函数对象来改变其行为,例如使用 greater
来实现最小堆。
#include <iostream>
#include <queue>
int main() {
std::priority_queue<int> maxHeap;
maxHeap.push(5);
maxHeap.push(2);
maxHeap.push(8);
while (!maxHeap.empty()) {
std::cout << maxHeap.top() << " "; // Output: 8 5 2
maxHeap.pop();
}
return 0;
}
class Solution {
public:
long long totalCost(vector<int>& costs, int k, int candidates) {
long long ans = 0;
int left = 0, right = costs.size() - 1;
priority_queue<int, vector<int>, greater<int>> prePq, purPq;
while (k--) {
while (prePq.size() < candidates && left <= right) {
prePq.emplace(costs[left++]);
}
while (purPq.size() < candidates && left <= right) {
purPq.emplace(costs[right--]);
}
int a = prePq.empty() ? INT_MAX : prePq.top();
int b = purPq.empty() ? INT_MAX : purPq.top();
if (a <= b) {
ans += a;
prePq.pop();
} else {
ans += b;
purPq.pop();
}
}
return ans;
}
};