zoukankan      html  css  js  c++  java
  • 刷题-力扣-703

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

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题目描述

    设计一个找到数据流中第 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 <= 104
    • 0 <= nums.length <= 104
    • -104 <= nums[i] <= 104
    • -104 <= val <= 104
    • 最多调用 add 方法 104 次
    • 题目数据保证,在查找第 k 大元素时,数组中至少有 k 个元素

    题目分析

    1. 根据描述,选用muliset类型
    2. 每次add都向nums中添加一个元素,取出倒数第k个元素,muliset是从小到大排列

    代码

    class KthLargest {
    public:
        KthLargest(int k, vector<int>& nums) {
            this->k = k;
            for (int i = 0; i < nums.size(); i++) {
                this->nums.insert(nums[i]);
            }
        }
    
        int add(int val) {
            this->nums.insert(val);
            auto index = this->nums.end();
            std::advance(index, this->k * (-1));
            return *index;
        }
    private:
        int k;
        multiset<int> nums;
    
    };
    
    /**
     * Your KthLargest object will be instantiated and called as such:
     * KthLargest* obj = new KthLargest(k, nums);
     * int param_1 = obj->add(val);
     */
    
  • 相关阅读:
    OAuth
    PHP获取客户端的真实IP
    负载均衡----实现配置篇(Nginx)
    在线时间戳转换
    使用curl进行模拟登录
    定时任务
    Matplotlib使用教程
    CentOS7.X安装PHP
    Python虚拟环境的搭建与使用
    CentOS7.X安装openssl
  • 原文地址:https://www.cnblogs.com/HanYG/p/14398176.html
Copyright © 2011-2022 走看看