LeetCode算法题-Kth Largest Element in a Stream(Java实现)

Kth Order Statistic - 一种高效的统计算法 它通过选择一个pivot元素将数组划分为两个部分,其中左边的部分包含较小的元素,右边的部分包含较大的元素。然后,根据pivot元素在数组中的位置,可以确定第K小的元素位于左侧或右侧,从而将搜索范围缩小一半。Kth Order Statistic算法是一种高效的查找第K小的元素的算法。Kth Order Statistic(第K小的元素)是一种用于在一个未排序的数组中找到第K小的元素的算法。在本文中,我们将介绍一种高效的Kth Order Statistic算法,并提供相应的Python实现。 阅读详情

这是悦乐书的第296次更新,第315篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第164题(顺位题号是703)。设计一个类来查找流中第k个最大元素。请注意,它是排序顺序中的第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); //返回4

kthLargest.add(5); //返回5

kthLargest.add(10); //返回5

kthLargest.add(9); //返回8

kthLargest.add(4); //返回8

注意:nums的长度大于等于0。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

直接解法。使用数组,在add方法里,首先将原数组扩容,将新的元素添加进数组中去,再对数组排序,然后取出倒数第k个元素。期间,借助工具类Arrays来实现数组扩容和排序。

class KthLargest {
    int k;
    int[] nums;
    public KthLargest(int k, int[] nums) {
        this.k = k;
        this.nums = nums;
    }

    public int add(int val) {
        int[] temp = Arrays.copyOf(nums, nums.length+1);
        temp[temp.length-1] = val;
        Arrays.sort(temp);
        nums = temp;
        return temp[nums.length-k];
    }
}

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

03 第二种解法

使用优先队列。优先队列自带排序算法,在初始化时如果不指定排序方式,则默认以自然方式排序,优先队列的头就会是以自然排序为基础的最小元素。因此,我们可以在初始化优先队列时,就指定其大小为k,然后找出最大的前k个元素存入优先队列,每次调用add方法时,就比较传参val和队列头的大小,如果val比队列头大,就移除原队列头,将val作为新的队列头。

class KthLargest {
    int k;
    PriorityQueue<Integer> q;
    public KthLargest(int k, int[] nums) {
        this.k = k;
        q = new PriorityQueue<Integer>(k);
        for (int n : nums) {
            add(n);
        }
    }

    public int add(int val) {
        if (q.size() < k) {
            q.offer(val);
        } else if (q.peek() < val) {
            q.poll();
            q.offer(val);
        }
        return q.peek();
    }
}

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

04 小结

算法专题目前已日更超过四个月,算法题文章164+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

R语言笔记三:矩阵、数组、列表和数据框 1.矩阵        矩阵是二维的,需要有行和列。向量是一维的。        在R软件中,矩阵是有维数的向量,这里的矩阵元素可以是数值型、字符型或者逻辑型,但是每个元素必须拥有相同的模式,这个和向量一致。 (1)创建矩阵: m <- matrix(1:20,4,5) 行数和列数的分配必须满足分配条件。若分配的行列过大,分配的元素不足够,则报错。 m <- 阅读详情

相关推荐

手把手教你用Github提交CVE漏洞(附完整截图流程)

本文提供了在GitHub平台提交CVE漏洞的完整实战指南。从前期准备、目标搜寻与漏洞验证,到撰写规范的GitHub Issue进行披露,最后通过官方渠道完成CVE提交,手把手教你如何将安全研究成果转化为获得国际认可的CVE编号。

weixin_28309571的博客 331

kth (1)概述

kth既是寻找未排序数组中第k大的数 1. 排序法 将数组排序后,返回第k个元素。 . 复杂度 时间 O(NlogN) 空间 O(1) 2. 优先队列 遍历数组时将数字加入优先队列(堆),一旦堆的大小大于k就将堆顶元素去除,确保堆的大小为k。遍历完后堆顶就是返回值。 . 复杂度 时间 O(NlogK) 空间 O(K) int findKthLargest(int a[], int nSize, int k) { // Creating a min-heap using priority queue

thefist的专栏 796

Android AudioFlinger实战:如何用FastMixer优化低延迟音频流(附调试技巧)

本文深入解析了Android AudioFlinger的FastMixer线程机制,指导开发者如何利用该技术优化低延迟音频流。通过实战配置AAudio API、调整硬件缓冲区及线程优先级,并结合adb、Systrace等调试技巧,可将音频延迟显著降低至10毫秒以下,适用于音乐制作、游戏音效等实时音频处理场景。

weixin_29230901的博客 336

【算法-快速排序】第k大元素(Kth Largest Element)

快速排序算法改进实现寻找第k大元素

即使慢一点,也要努力的成长呀~ 6218

kettle写doris操作

文件在目录:doris-master\extension\kettle\assemblies\plugin\target\doris-stream-loader-plugins-9.4.0.0-343.zip。官方提供了doris stream load插件,下载源码编译后放到kettle的插件目录即可使用。地址:https://github.com/apache/doris.git。注意:需要doris插件或者kettle转换生成模板的私聊博主。使用PDmaner同步业务库生成建表语句。

weixin_44449054的博客 3033

机器学习项目(四)疫情期间网民情绪识别 (一)

疫情期间网民情绪识别 赛题背景 2019新型冠状病毒(2019-nCoV)感染的肺炎疫情发生对人们生活生产的方方面面产生了重要影响,并引发国内舆论的广泛关注,众多网民参与疫情相关话题的讨论。为了帮助政府掌握真实社会舆论情况,科学高效地做好防控宣传和舆情引导工作,本赛题针对疫情相关话题开展网民情绪识别的任务。 数据介绍 训练集 10万条 无标记样本90万条 测试集1万条 数据集依据与“新冠肺炎”相关...

qq_33357094的博客 8972

Kth Largest Element in a Stream --java 记录

设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。 示例: 利用构建二叉搜索树来查找。 思路: 判断根节点是第几大值,因为右子树都比root都大,右子树节点个数加1,...

zkhong07的博客 242

Atlas 300I Pro推理卡性能深度测试:对比业界同类产品的能效比与算力表现

本文对昇腾Atlas 300I Pro推理卡进行了深度性能评测,重点对比了其与业界同类产品的能效比与算力表现。实测数据显示,该卡在运行BERT等模型时展现出高达39.6句子/秒/瓦的卓越能效比,电力成本可降低40%以上,同时其达芬奇架构和硬件加速特征检索能力,为高密度在线推理和向量检索场景提供了强大支撑。

weixin_29031161的博客 579

算法-TopK问题

347. 前 K 个高频元素 TOPK=小根堆 小根堆核心代码: //建堆 for(int j = k/2 -1 ; j >= 0 ; j--){ heapSort(heap,j); } public void heapSort(int[] heap , int i){ int temp = heap[i]; int j=i*2; while (j<heap.length){ if(j+1<heap.

kk阿彬 931

c# U盘禁用---守护进程(插入,拔出,卸载等操作)

一、简介 传统的对U盘禁用,我们多采用修改注册表的方式,详情参考:https://blog.youkuaiyun.com/qq_25372599/article/details/79815407;本文将介绍一种其他的方式–后台守护程序。其原理非常简单:当守护程序检测到U盘的插入信号,我们自动卸载U盘,致使系统无法识别U盘,达到禁用U盘的效果。 二、程序设计 2.1 变量定义 strin...

星星之火燃亮码空 2848

【ComfyUI专栏】安装Triton组件

Triton是一款支持大模型推理的深度学习加速组件,最初仅支持Linux平台,现已通过开源社区适配Windows系统。针对SageAttention的安装,建议使用3.2.0Post10版本(该版本提供封装好的安装包,更高版本仅有源码)。用户可通过GitHub获取安装资源,或直接使用pip命令"pip install triton-windows"进行安装。安装时需注意:1)在虚拟环境中操作;2)使用管理员权限。相关资源链接已在文中提供。

技术与管理的平衡木- 1870

Leetcode 703. Kth Largest Element in a Stream

文章作者:Tyan 博客:noahsnail.com &nbsp;|&nbsp; 优快云 &nbsp;|&nbsp; 简书 1. Description 2. Solution Version 1 class KthLargest { public: KthLargest(int k, vector&lt;int&gt; nums) { th...

SnailTyan 541

Nuvoton NPCM845X SoC

摘要:NPCM845X是Nuvoton推出的第四代BMC片上系统,专为服务器管理设计。采用四核Arm Cortex-A35架构,集成安全启动机制和硬件级安全组件,支持OP-TEE可信执行环境。提供完整的信任链设计,从Boot ROM到Linux内核分层验证。具备丰富外设接口和管理功能,支持OpenBMC、IPMI 2.0等标准,适用于数据中心安全管控需求。

Linux内核架构师 101

leetcode 703. Kth Largest Element in a Stream

目录 一、问题分析 二、代码实现 1、排序 2、小顶堆 3、桶排序 https://leetcode.com/problems/kth-largest-element-in-a-stream/ 设计一个类,其add()方法会从数据流中拿出一个数据添加到这个结构中,并返回该结构中第k大的数据。 一、问题分析 测试用例: Example: int k = 3; in...

小景的博客 428

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【LeetCode】703. Kth Largest Element in a Stream(Java)

题目描述:设计一个类来查找流中第k大的元素。注意,它是排序顺序中第k大的元素,而不是第k个不同的元素。 第k大的类将有一个接受整数k和整数数组nums的构造函数,整数数组nums包含来自流的初始元素。对于对方法kthmaximum的每次调用。添加,返回表示流中第k个最大元素的元素 Example: /** * 返回数据流中第k大元素 * * @author wangfei */ publ...

Rabbit_Judy的博客 407

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

(leetcode)Kth Largest Element in a Stream(java)

Kth Largest Element in a Stream 设计一个找到数据流中第K大元素的类(class)。注意是排序后的第K大元素,不是第K个不同的元素。 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器,它包含数据流中的初始元素。每次调用 KthLargest.add,返回当前数据流中第K大的元素。 示例: 参考了大佬的代码,一开始并没有理解root...

weixin_42503915的博客 163

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

703. Kth Largest Element in a Stream

Description Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Your KthLargest class will have a con...

BigFatSheep的博客 183

【java】703. Kth Largest Element in a Stream

问题原文https://leetcode-cn.com/problems/kth-largest-element-in-a-stream/description/ 这道题的技巧是在队列里面维护k个元素。 class KthLargest { int k; PriorityQueue&lt;Integer&gt; queue; public KthLargest(int...

amber804105的博客 973

LeetCode 703. Kth Largest Element in a Stream(数据流中第K大元素)

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

肉丸不肉 558

LeetCode - Easy - 703. Kth Largest Element in a Stream

Topic Design Binary Search Tree Heap (Priority Queue) Description https://leetcode.com/problems/kth-largest-element-in-a-stream/ Design a class to find the kthk^{th}kth largest element in a stream. Note that it is the kthk^{th}kth largest element in the

KISS 283

LeetCode(Heap)703. Kth Largest Element in a Stream

LeetCode(Heap)703. Kth Largest Element in a Stream

weixin_45428910的博客 233

Leetcode 703.Kth Largest Element in a Stream

Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Your KthLargest class will have a constructor whi...

两鬓已不能斑白的专栏 411

Java—Leetcode 703 Kth Largest Element in a Stream

【代码】Java—Leetcode 703 Kth Largest Element in a Stream。

m0_60551898的博客 135

LeetCode - Kth Largest Element in a Stream

Design a class to find the kth largest element in a stream. Note that it is the kth largest element in the sorted order, not the kth distinct element. Your KthLargest class will have a constructo...

weixin_34235135的博客 144

Leetcode 703题数据流中的第K大元素(Kth Largest Element in a Stream)Java语言求解

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

随机的未知——用已知去面对未知 161

LeetCode 703. Kth Largest Element in a Stream

原题链接在这里:https://leetcode.com/problems/kth-largest-element-in-a-stream/description/ 题目: Design a class to findthekth largest element in a stream. Note that it is the kth largest element in the sort...

weixin_30318645的博客 84
上一篇: LeetCode算法题-Search in a Binary Search Tree(Java实现)
下一篇: LeetCode算法题-Binary Search(Java实现)
程序员小川
博客等级 码龄10年 47粉丝 305原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值