Leetcode 703. 数据流中的第 K 大元素(终于解决)
Published on 2022-05-28 11:38 in 分类: C/C++ with 萧海~
分类: C/C++

Leetcode 703. 数据流中的第 K 大元素(终于解决)

    在这里插入图片描述
    设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。

    请实现 KthLargest 类:

    • KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。
    • int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。

    示例:

    输入:
    ["KthLargest", "add", "add", "add", "add", "add"]
    [[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]
    输出:
    [null, 4, 5, 5, 8, 8]
    解释:
    KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);
    kthLargest.add(3); // return 4
    kthLargest.add(5); // return 5
    kthLargest.add(10); // return 5
    kthLargest.add(9); // return 8
    kthLargest.add(4); // return 8

    提示:

    • 1 <= k <= 10^4
    • 0 <= nums.length <= 10^4
    • -10 ^ 4 <= nums[i] <= 10^4
    • -10^ 4 <= val <= 10^4
    • 最多调用 add 方法 10^4 次
    • 题目数据保证,在查找第 k 大元素时,数组中至少有 k 个元素

    主要思路:一开始以位只要直接sort就行,但是测试案例9会显示超时
    看了看评论区,有用到队列。思考一番,便采用优先队列解决
    Code:

    class KthLargest {
    public:
    KthLargest(int k, vector<int>& nums) {
    m_index=k;
    m_vec=nums;
    size=k;
    if(m_vec.size())
    sort(m_vec.begin(),m_vec.end(),greater<int>());
    if(m_vec.size())
    {
    for(int i=0;i<k&&(i<nums.size());i++)
    {
    m_q.push(m_vec[i]);
    }
    }
    }
    int add(int val) {
    if(m_q.size())
    {
    if(m_q.size()!=size)
    {
    m_q.push(val);
    return m_q.top();
    }
    if(val>m_q.top())
    {
    if((int)m_q.size()==size)
    {
    m_q.pop();
    m_q.push(val);
    }
    else
    {
    m_q.push(val);
    }
    cout<<"end"<<endl;
    }
    }
    else
    m_q.push(val);
    return m_q.top();
    }
    private:
    int m_index=0;
    vector<int>m_vec;
    int m_num=0;
    int size;
    priority_queue<int,vector<int>, greater<int> > m_q;
    };
    /**
    * Your KthLargest object will be instantiated and called as such:
    * KthLargest* obj = new KthLargest(k, nums);
    * int param_1 = obj->add(val);
    */
    posted @   萧海~  阅读(24)  评论(0编辑  收藏  举报
    相关博文:
    阅读排行:
    · winform 绘制太阳,地球,月球 运作规律
    · AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
    · 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
    · 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
    · 上周热点回顾(3.3-3.9)
    点击右上角即可分享
    微信分享提示
    电磁波切换