C++之最小堆、最大堆

#include
#include
std::priority_queue big_heap;   // 构造一个默认最大堆
std::priority_queue, std::greater > small_heap; //构造一个最小堆

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

最大最小堆的基本操作:

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

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

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

class Solution {
public:
    int findKthLargest(vector& nums, int k) {
        priority_queue, std::greater > small_queue;
        for(int i=0; ismall_queue.top()){
                    small_queue.pop();
                    small_queue.push(nums[i]);
                }
            }
        }
        return small_queue.top();
    }
};

你可能感兴趣的:(C++,数据结构刷题)