C++之最小堆、最大堆

本文介绍了C++中的最小堆和最大堆,其中最大堆的每个父节点大于其子节点,最小堆则相反。堆排序的时间复杂度为O(logn)。最大最小堆的主要操作包括插入和删除,常用于动态获取序列的最大值或最小值。举例说明如何在未排序数组中找到第k个最大元素的问题。
摘要由CSDN通过智能技术生成
#include<queue>
#include<vector>
std::priority_queue<int> big_heap;   // 构造一个默认最大堆
std::priority_queue<int, std::vector<int>, std::greater<int> > small_heap; //构造一个最小堆

最大堆:所有的父节点都要比子节点要大。故根结点为最大值。
最小堆:所有的父节点都要比子节点要小。故根结点为最小值。
注:堆排序的时间复杂度为log(n);

最大最小堆的基本操作:

heap.top();  //返回最大或者最小元素。即根结点的值
heap.pop(); //删除最大或者最小元素,即根结点的值
heap.push(); //push一个值进最大/最小堆,根据值的大小排列堆
heap.empty(); //返回是否为空
heap.size(); //返回堆中元素个数

最大最小堆的应用:主要是利用堆可以动态的排序,随时可以取出最大值或者最小值。

例题:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int, std::vector<int>, std::greater<int> > small_queue;
        for(int i=0; i<nums.size(); ++i){
            if(i<k){
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值