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 val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。


思路:

1、优先队列

(1)使用Priority优先队列完成每次数据更新时的自动排序

(2)构建小顶堆并维护其节点数量为K,当到达阈值取出堆顶元素即当前第K大的元素

(3)每次堆内重排只需要O(logn)的时间

2、手写堆

(1)按照小顶堆构建和重构规则进行搭建


AC代码:

  1. 优先队列
class KthLargest {PriorityQueue<Integer> p;int k;public KthLargest(int k, int[] nums) {this.k=k;p=new PriorityQueue<>();for(int x:nums){add(x);}}public int add(int val) {p.offer(val);if(p.size()>k){p.poll();}return p.peek();}
}/*** Your KthLargest object will be instantiated and called as such:* KthLargest obj = new KthLargest(k, nums);* int param_1 = obj.add(val);*/
  1. 手写堆
class KthLargest {int[] heap;int count=0;int size=0;public KthLargest(int k, int[] nums) {heap=new int[k];count=k;for(int x:nums){add(x);}}public int add(int val) {if (size < count) {heap[size] = val;up(size);size++;}else if(val>heap[0]){heap[0]=val;down(0);}return heap[0];}private void down(int u){int t=u;if(2*u+1<size&&heap[2*u+1]<heap[t])t=2*u+1;if(2*u+2<size&&heap[2*u+2]<heap[t])t=2*u+2;if(t!=u){int tmp=heap[u];heap[u]=heap[t];heap[t]=tmp;down(t);}}private void up(int u){//当前节点与它的父节点值比较while((int)(Math.ceil(u/2.0)-1)>=0&&heap[(int)Math.ceil(u/2.0)-1]>heap[u]){int p=(int)(Math.ceil(u/2.0)-1);int tmp=heap[u];heap[u]=heap[p];heap[p]=tmp;u=p;}}
}/*** Your KthLargest object will be instantiated and called as such:* KthLargest obj = new KthLargest(k, nums);* int param_1 = obj.add(val);*/

703. 数据流中的第 K 大元素相关推荐

  1. ⭐算法入门⭐《堆》中等02 —— LeetCode 703. 数据流中的第 K 大元素

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   设计一个找到数据流中第 ...

  2. Java实现 LeetCode 703 数据流中的第K大元素(先序队列)

    703. 数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组n ...

  3. leetcode 703. 数据流中的第K大元素 最小堆解法 c语言

    如题: 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含 ...

  4. leetcode 703. 数据流中的第 K 大元素(堆)

    设计一个找到数据流中第 k 大元素的类(class).注意是排序后的第 k 大元素,不是第 k 个不同的元素. 请实现 KthLargest 类: KthLargest(int k, int[] nu ...

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

    1. 题目 设计一个找到数据流中第K大元素的类(class). 注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器, ...

  6. 174. 地下城游戏;剑指 Offer 40. 最小的k个数;378. 有序矩阵中第K小的元素;703. 数据流中的第K大元素

    一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士的初始 ...

  7. Leetcode 703. 数据流中的第K大元素 解题思路及C++实现

    解题思路: 使用一个最小堆来存储数据,在C++中,对应是#include<queue>头文件中的priority_queue. 程序逻辑:KthLargest类初始化的时候,先根据nums ...

  8. 从C语言的角度重构数据结构系列(七)-数据结构堆知识求解数据流中的第K大元素

    前言 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战应用系列课程 https://blog.csdn.net/wenyusuran/category_2239261.html ...

  9. 数据流中的第k大元素的golang实现

    设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中 ...

最新文章

  1. 使用np.load()加载数据 报错 Object arrays cannot be loaded when allow_pickle=False
  2. Cocos2d学习之路三(使用Zwoptex创建精灵表单和CCAnimate动画)
  3. java 读取word书签_Java 添加、读取、删除Word书签
  4. factorybean与beanfactory
  5. 正则环视 php,正则表达式基本知识(php)
  6. XDJM的情意比山高,比海深!!
  7. js最全的十种跨域解决方案
  8. c 语言中的菱形继承,C++中的菱形继承深入分析
  9. 为什么有些人看了别人的总结、经验、教训,依然没有用。
  10. python文件内容写入的方法有哪些、对应的方法和含义_Python的文件读写及目录操作...
  11. 性能测试--jmeter中http的请求默认值【6】
  12. 用python计算2+4+6+…+20的值_Day4-Python-循环和分之学习-2018/7/19
  13. 集美大学计算机工程学院 曾勇进,电子政务评估方法AHP 的研究及实现.pdf
  14. 取色器——TakeColor绿色安全简单
  15. 怎么用屏幕录像工具录制游戏的精彩时刻
  16. 2022-2028年全球与中国手持式按摩器行业市场深度调研及投资预测分析
  17. 微信浏览量服务器,微信uv和pv是什么?独立访客(UV)数据页面浏览数(PV)的关系
  18. AM437X系列编译环境搭建
  19. PUN☀️七、网络同步:Object Synchronization
  20. 你不知道的Word中制作表格的7个技巧

热门文章

  1. 爸爸的奶奶叫什么?Python打造爆款走亲戚神器—走上人生巅峰。
  2. 加薪利器--Javaj进阶设计模式(1接2)
  3. 如何将网页转换成Android APP
  4. 回归算法实例一:家庭用电预测——时间与功率、功率与电流、时间与电压之间的关系
  5. 迪文串口屏(1)-DMG80480C070_03WTC
  6. [分治] AOAPC2-ch8 棋盘覆盖问题
  7. 科创板历史行情数据 API 接口
  8. Angular-组件
  9. 数学的意义(最全最牛的解释)
  10. NSudo-关闭win10系统更新