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