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. MSSQL扫盲系列(4)-系统函数
  2. Android得到控件在屏幕中的坐标
  3. CSS3实践之路(六):CSS3的过渡效果(transition)与动画(animation)
  4. oracle异常如何处理,ORACLE异常处理总结
  5. 关于Apache虚拟主机的设置
  6. Codeforces698B【并查集+拆环】
  7. Linux系统常用的基本命令【转载CSDN象在舞】
  8. lvs负载均衡—NAT模式
  9. 关于欧几里德第五公设的感言
  10. 判断是否是微信浏览器
  11. 利用Cookies实现ASP.NET跨域单点登录
  12. 在IT行业中扮演技术支持和程序员的未来分析
  13. 史上最详细清样/校样(Proof)处理流程Hindawi
  14. Excel 解决高次方程求解的方法
  15. Python字典知识总结
  16. Express-get和post
  17. java bitmap 保存 jpg_Glide加载图片并保存到本地返回file,bitmap
  18. python简易爬取喜马拉雅MP3
  19. CCF认证201403-1相反数
  20. [合规性检查方法-Fitness3】基于足迹矩阵的拟合度评估方法

热门文章

  1. Error-prone
  2. ArcGis 打开CAD文件的几种方法
  3. 计算机毕业设计、实战项目之 [课设文档]基于JSP的在线调查问卷系统[包运行成功]
  4. 5.2 缺失值处理(去除缺失值)
  5. JVMGC(三)-System.gc()方法
  6. 华为鸿蒙多屏互动,本报记者体验华为首款鸿蒙产品
  7. 国内自动驾驶车辆传感器方案哪家强?
  8. [2018-2019上 网络工程] 第0次作业
  9. 软件测试肖sir___项目讲解之实战
  10. 互联网金融系列-支付清算体系例子-下