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 val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。
思路:
1、优先队列
(1)使用Priority优先队列完成每次数据更新时的自动排序
(2)构建小顶堆并维护其节点数量为K,当到达阈值取出堆顶元素即当前第K大的元素
(3)每次堆内重排只需要O(logn)的时间
2、手写堆
(1)按照小顶堆构建和重构规则进行搭建
AC代码:
- 优先队列
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);*/
- 手写堆
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 大元素相关推荐
- ⭐算法入门⭐《堆》中等02 —— LeetCode 703. 数据流中的第 K 大元素
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 设计一个找到数据流中第 ...
- Java实现 LeetCode 703 数据流中的第K大元素(先序队列)
703. 数据流中的第K大元素 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组n ...
- leetcode 703. 数据流中的第K大元素 最小堆解法 c语言
如题: 设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含 ...
- leetcode 703. 数据流中的第 K 大元素(堆)
设计一个找到数据流中第 k 大元素的类(class).注意是排序后的第 k 大元素,不是第 k 个不同的元素. 请实现 KthLargest 类: KthLargest(int k, int[] nu ...
- LeetCode 703. 数据流中的第K大元素(优先队列)
1. 题目 设计一个找到数据流中第K大元素的类(class). 注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器, ...
- 174. 地下城游戏;剑指 Offer 40. 最小的k个数;378. 有序矩阵中第K小的元素;703. 数据流中的第K大元素
一些恶魔抓住了公主(P)并将她关在了地下城的右下角.地下城是由 M x N 个房间组成的二维网格.我们英勇的骑士(K)最初被安置在左上角的房间里,他必须穿过地下城并通过对抗恶魔来拯救公主. 骑士的初始 ...
- Leetcode 703. 数据流中的第K大元素 解题思路及C++实现
解题思路: 使用一个最小堆来存储数据,在C++中,对应是#include<queue>头文件中的priority_queue. 程序逻辑:KthLargest类初始化的时候,先根据nums ...
- 从C语言的角度重构数据结构系列(七)-数据结构堆知识求解数据流中的第K大元素
前言 在这里给自己打个广告,需要的小伙伴请自行订阅. python快速学习实战应用系列课程 https://blog.csdn.net/wenyusuran/category_2239261.html ...
- 数据流中的第k大元素的golang实现
设计一个找到数据流中第K大元素的类(class).注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中 ...
最新文章
- MSSQL扫盲系列(4)-系统函数
- Android得到控件在屏幕中的坐标
- CSS3实践之路(六):CSS3的过渡效果(transition)与动画(animation)
- oracle异常如何处理,ORACLE异常处理总结
- 关于Apache虚拟主机的设置
- Codeforces698B【并查集+拆环】
- Linux系统常用的基本命令【转载CSDN象在舞】
- lvs负载均衡—NAT模式
- 关于欧几里德第五公设的感言
- 判断是否是微信浏览器
- 利用Cookies实现ASP.NET跨域单点登录
- 在IT行业中扮演技术支持和程序员的未来分析
- 史上最详细清样/校样(Proof)处理流程Hindawi
- Excel 解决高次方程求解的方法
- Python字典知识总结
- Express-get和post
- java bitmap 保存 jpg_Glide加载图片并保存到本地返回file,bitmap
- python简易爬取喜马拉雅MP3
- CCF认证201403-1相反数
- [合规性检查方法-Fitness3】基于足迹矩阵的拟合度评估方法
热门文章
- Error-prone
- ArcGis 打开CAD文件的几种方法
- 计算机毕业设计、实战项目之 [课设文档]基于JSP的在线调查问卷系统[包运行成功]
- 5.2 缺失值处理(去除缺失值)
- JVMGC(三)-System.gc()方法
- 华为鸿蒙多屏互动,本报记者体验华为首款鸿蒙产品
- 国内自动驾驶车辆传感器方案哪家强?
- [2018-2019上 网络工程] 第0次作业
- 软件测试肖sir___项目讲解之实战
- 互联网金融系列-支付清算体系例子-下