Leetcode 703.数据流中的第K大元素(简单) 优先队列 小顶堆

「数据结构详解·十四」对顶堆 对顶堆详解 阅读详情

题目描述:

设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。

你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。

示例:

int k = 3;
int[] arr = [4,5,8,2];
KthLargest kthLargest = new KthLargest(3, arr);
kthLargest.add(3);   // returns 4
kthLargest.add(5);   // returns 5
kthLargest.add(10);  // returns 5
kthLargest.add(9);   // returns 8
kthLargest.add(4);   // returns 8

说明:
你可以假设 nums 的长度≥ k-1 且k ≥ 1。

 思路:创建一个优先队列,维护最大的k个数(其实是一个小顶堆);每次add之后若size大于k则删除队列中的最小值,若小于k则不做操作。最后输出队顶元素即为所求。

class KthLargest {
private:
    priority_queue<int, vector<int>, greater<int>> que;
    int K;
public:
    KthLargest(int k, vector<int>& nums) {
        int len = nums.size();
        K = k;
        for(int i=0; i<len; ++i)
        {
            add(nums[i]);
        }
    }
    
    int add(int val) {
        que.push(val);
        //K = que.size()-K;
        if(que.size() > K){//超过k的可以删除
            que.pop();
        }
        return que.top();
    }
};

/**
 * Your KthLargest object will be instantiated and called as such:
 * KthLargest* obj = new KthLargest(k, nums);
 * int param_1 = obj->add(val);
 */

对C++优先队列解释比较详细的博客。供大家学习

https://blog.youkuaiyun.com/weixin_36888577/article/details/79937886

 

 

 

告别卡顿!用U盘给你的MacBook Pro 2015+来一次macOS Monterey的‘大扫除’式安装 每次系统升级后,老款MacBook Pro用户最常抱怨的就是"怎么比之前更卡了?"——这不是错觉。系统迭代过程中积累的缓存文件、残留配置和隐形服务,就像房间角落堆积的灰尘,拖慢了整台机器的响应速度。而通过U盘进行的macOS Monterey全新安装,本质上是一次彻底的"数字大扫除":它不仅替换系统文件,还会重建所有索引、清理磁盘碎片,甚至能解决某些玄学般的卡顿问题。对于2015款及之后的MacBook Pro用户,这种安装方式能让老设备重获新生。 阅读详情

相关推荐

PP生产订单的BADI增强 WORKORDER_UPDATE

我们的项目需求是: 1、 保存时检查工单BOM是否存在物料号相同的行项目,如果有则提示“物料& 重复,请检查工单BOM” 系统增强出口:PPCO0001,检查组件行项目是否有重复物料项 开始以为的增强增强看一下是用PPCO0001还是PPCO0007 后来找到了badi WORKORDER_UPDATE IF_EX_WORKORDER_UPDATE~BEFORE_UPDATE

ERP运维咨询(目标和成功) 4633

算法提高——数据结构(对顶堆)

文章目录前言一、例题动态中位数二、算法介绍1.对顶堆代码 前言 对顶堆是数据结构堆的一种应用,属于面试必考题之一,对顶堆可以用来动态维护第k大的值,比如中位数等等。 一、例题 动态中位数 依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数。 输入格式 第一行输入一个整数 P,代表后面数据集的个数,接下来若干行输入各个数据集。 每个数据集的第一行首先输入一个代表数据集的编号的整数。 然后输入一个整数 M,代表数据集中包含数据的个数,M 一定为奇数,数据之间用空格隔开。

leoyongyuan的博客 1183

双足步行机器人的ZMP与CoP检测

静态步行与动态步行   机器人步态分为静态步行和动态步行。当机器人做静态步行运动时,身体的各个部分运动速度很小,机器人的整体稳定性较易控制。静态步行稳定性采用机器人的重心地面投影点(Center of Gravity,简称CoG)作为稳定性标准,这种判定方法适用于运动较为缓慢的情况。如果机器人采用的是一种高速运动的步行方式,则称之为动态步行。当机器人进行动态步行时,其重心的位置和加速度的大小时...

weixin_34112208的博客 5906

浅谈对顶栈,单调栈,对顶堆

单调栈 定义:从栈顶到栈底保持一个单调递增或者单调递减的顺序的栈。(本质上还是一个栈) 实际作用:用于找到序列中某一个元素左边第一个比它大(或者小 的元素的位置和 右边第一个比他它小(或者大) 的元素的位置。 效率:由于序列中每个元素最多进出栈一次,所以时间复杂度是O(n). 大致图形: 以序列 1 4 5 2 7为例 那么我们应该如何维护单调栈呢?竟然已经知道了它的内部逻辑,我们不妨按照以下的步骤去维护这个栈。(假设以单调递增栈为例),对于一个无序序列,我们从头开始遍历。如果栈为空或者当前元素小于

qq_51467306的博客 1753

Linux CentOS 8系统离线升级内核版本

CentOS 8操作系统离线场景下升级内核版本

WQwinter的博客 3236

2026 最新实战教程:AI 重构开发全流程(从需求→上线→运维)

1)做什么系统2)技术栈3)功能模块4)部署要求plaintext我要做一个:待办事项(Todo)全栈应用技术栈:前端:React + TypeScript + Tailwind后端:Node.js + Express + MongoDB部署:Docker + 本地运行(后续可上云)功能:- 增删改查任务- 任务状态切换(完成/未完成)- 简单错误处理请按企业级标准生成:架构设计 + 全部代码 + 接口文档 + 启动命令。

qq_35779316的博客 1680

堆、堆组合(对顶堆)以及堆的灵活应用

堆的简介 转载链接(堆的基本概念) 对顶堆 对顶堆是由一个大顶堆和一个小顶堆组合而成的数据结构,与传统堆维护最大数不同,对顶堆用与动态维护第K大的数。 ...

蒟蒻的博客 1305

基于深度学习的图像识别技术在农业领域中的应用

是识别"病害种类"还是"病害严重度分级"?前者是分类,后者常需分割或分级回归。是叶片级(离体叶片图像)、植株级(田间单株)、地块级(无人机俯拍)?视角不同,模型差异巨大。实时无人机巡检可能要求 < 50 ms/帧(Jetson Orin),而离线测报可接受秒级推理。类别标签、结构化 JSON、GIS 图斑、报警事件?

AI天才研究院 2160

神奇的东西——对顶堆

一.定义   就是一个大根堆与一个小根堆的结合,可以用来解决动态区间第k大的问题。可以通过下图来理解。  那么我们如何建一个对顶堆呢?  上文说到,对顶堆是一种基于大根堆和小根堆的数据结构。最开始的时候,由于两者都是空的堆,我们随便将其插入进去即可。之后每一步操作边与大根堆的最大值相互比较,将其插入至正确的位置。  不过有些时候,实际情况中我们运用对顶堆最后得到的结果多数在堆顶附近,所以我们还需要对对顶堆进行调整,来达到实际的目的。  以中位数问题为例  现在有一个序列动态输入,求每次输入后的中位数  利

Lucas_FC_的博客 822

【PINN物理信息网络】基于PINN物理信息网络求解瞬态薛定谔方程(python)

【PINN物理信息网络】基于PINN物理信息网络求解瞬态薛定谔方程(python)

k8291121的博客 2722

桌面运维工程师面试题汇总(高频完整版)

岗位,覆盖:电脑硬件、系统安装与故障、网络、办公软件、安全、AD域、打印机、日常排错、服务意识。

老韩的Linux云计算架构师进阶之路 905

Leetcode703数据流中的第k大元素

Leetcode703数据流中的第k大元素 思路: 把这k个元素建一个数据结构,可以方便的读出来其中最小的,所以可以用队列中的小顶堆,或者使用set排序应该也可以。以下是优先队列小顶堆写法 class KthLargest { priority_queue<int,vector<int>,greater<int>> q; int k; publi...

漫漫编程路-小双在路上 189

2021-09-29 每天几个LCEDA小知识——如何交叉选择并阵列放置元器件

立创EDA专业版之交叉选择并阵列放置元器件????交叉选择????阵列放置 ????交叉选择 在原理图界面,先框选需要交叉选择的元器件对象,右键,选择交叉选择(如果熟练之后,直接选择元器件,快捷键Shift+X)。 完成上述操作之后,可以看到自动跳转到PCB绘图界面,并自动选定PCB中相关的元器件,接下来不要取消选择的状态,在相关元器件被选中的情况下,即可开展阵列放置,将这些元器件都放在一个区域,方便PCB画线前的布局工作。 ????阵列放置 在布局菜单栏中,选择分布,选择阵列分布, 在弹出的对话框

l64481000的博客 1463

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

Leetcode 703. 数据流中的第K大元素 题目 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。 示例: int k = 3; int[] arr = [4,5,8,2]; KthLargest kthLargest = new KthLargest(3, arr);

weixin_43750513的博客 367

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

703. 数据流中的第 K 大元素: 题目链接 :[703. 数据流中的第 K 大元素]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

weixin_45750855的博客 2677

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

703. 数据流中的第 K 大元素( 优先队列 / 小顶堆 )

LeetCode:703. 数据流中的第 K 大元素 topk 问题 求第 k 大的数 那就是小顶堆, 从小到大 手动实现小顶堆好难啊, 直接用优先队列了 AC Code class KthLargest { private int k; private PriorityQueue<Integer> queue; public KthLargest(int k, int[] nums) { // 初始化 this.k = k;

lankerens 431

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

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

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”

玛软的垃圾桶 271

LeetCode 703 数据流中的第K大元素 Kth Largest Element in a Stream Python

有关链表的LeetCode做题笔记合集,Python实现 703. 数据流中的第K大元素 Kth Largest Element in a Stream LeetCodeCN 第703题链接 方法一:直接降序排序,然后取第k个元素返回,add时每次都再排序一次,这样时间复杂度为O(k*logk) # 1.直接排序 class KthLargest: def __init__(self, k...

fongim的博客 359

【数据结构和算法】_03_优先队列 & 双向队列

【一】Priority Queue(优先队列)- 正常入,按优先级出 实现机制1: Heap(Binary,Binomial,Fibonacci) 实现机制2: Binary Search Tree 【二】Mini Heap(小顶堆)- 父亲节点 < 左右孩子节点 【三】Max Heap(大顶堆)- 父亲节点 > 左右孩子节点 【四】Interview(面试题) Kth ...

DamonDT 368

LeetCode 有关栈、堆、队列的做题笔记 Python实现

有关栈、堆、队列的LeetCode做题笔记,Python实现 20. 有效的括号 Valid Parentheses LeetCodeCN 第20题链接 使用 Stack 栈 来操作,用了一个技巧是先做一个字典,key为右括号,value为左括号。 class Solution: def isValid(self, s: str) -> bool: stack = ...

fongim的博客 302

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

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

tus00000的博客 210

[LeetCode-703]数据流中的第K大元素

题目链接:https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/submissions/ 题目介绍: 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用...

ArvinYL 1418

LeetCode 703. 数据流中的第K大元素(优先队列)

1. 题目 设计一个找到数据流中第K大元素的类(class)。 注意是排序后的第K大元素,不是第K个不同的元素。 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。 每次调用 KthLargest.add,返回当前数据流中第K大的元素。 示例: int k = 3; int[] arr = [4,5,8,2]; KthLargest k...

Michael是个半路程序员 1052

leetcode703.数据流中的第k大元素(解法)

题目描述 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。 解法1:优先队列 利用priority_queue这种数据结构。本题中为升序的优先队列,且初始化为有k个I...

Missjust的博客 515

【leetcode703】【返回数据流中的第K大元素】

返回数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。 示例: int k = 3; int[] arr = [4,5,8,2]; KthLarg...

zyuPp的博客 452

LeetCode703:数据流中的第k大元素 (附:优先队列的基础)

python中实现优先队列的基础知识: 相关链接:链接 常用概括: 需要引入的库: import heapq 返回数组中前K个最大或者最小的元素: import heapq nums = [14, 20, 5, 28, 1, 21, 16, 22, 17, 28] heapq.nlargest(3, nums) # 第一个参数是返回的元素的数量 # [28, 28, 22] heapq.nsmallest(3, nums) # [1, 5, 14] 自己定义按照什么因素进行排列: laptops

coding_diamond的博客 523
上一篇: Leetcode 705. 设计哈希集合(简单)
下一篇: leetcode 5.最长回文子串(中等)双指针
Perrysky
博客等级 码龄11年 16粉丝 85原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值