c++堆(优先队列)

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;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值