zoukankan      html  css  js  c++  java
  • leetcode c++做题思路和题解(5)——堆的例题和总结

    堆和优先队列

    堆的简介, 是一种二叉树, 有最大堆和最小堆miniheap. 通常用于构建优先队列.

    0. 目录

    1. 数据流中的第K大元素

    1. 数据流中的第K大元素

    数据流中的第K大元素

    复杂度为log2(N)

    class KthLargest {
    private:
        priority_queue<int, vector<int>, greater<int> > buf;//最小堆
        int mk;
    public:
        KthLargest(int k, vector<int>& nums):mk(k) { 
            if(nums.size() <= k) {
                for(int a:nums) buf.push(a);
                if(nums.size() == k-1) buf.push(INT_MIN);//确保元素满足k个,INT_MIN是int类型的最小值
                return;
            } 
            int i=0;
            for(;i<k;++i)
                buf.push(nums[i]);
            for(;i<nums.size();++i)
                add(nums[i]);
        }
        
        int add(int val) {
            if(val<=buf.top()) return buf.top();
            buf.pop();
            buf.push(val);
            return buf.top();
        }
    };
    
    /**
     * Your KthLargest object will be instantiated and called as such:
     * KthLargest* obj = new KthLargest(k, nums);
     * int param_1 = obj->add(val);
     */
    
  • 相关阅读:
    CoreLocation
    通知(NSNotificationCenter)
    加载xib文件
    UITextField
    UIButton
    UILabel
    UIAlertController
    layoutSubviews
    Java AQS详解(转)
    Java中synchronized
  • 原文地址:https://www.cnblogs.com/whuwzp/p/heap.html
Copyright © 2011-2022 走看看