Leetcode 数组中第 k 大的元素

news2024/10/11 15:48:24

在这里插入图片描述

使用最小堆 (min-heap) 来解决该问题

代码逻辑:

  1. 初始化最小堆并插入前 K 个元素

    • 首先,将数组的前 K 个元素插入到堆中。此时,堆的大小为 K,堆顶元素是这 K 个元素中最小的。
  2. 遍历剩余的数组元素

    • 对于数组的其余元素(从第 K 个元素开始),我们逐个与堆顶元素进行比较。
    • 如果当前元素比堆顶元素大,则说明它有可能是更大的元素之一,此时我们移除堆顶的最小元素,并将当前元素插入堆中。这样可以保持堆中总是存放着 K 个最大的元素。
  3. 返回堆顶元素

    • 最后,堆顶元素就是这 K 个最大的元素中最小的,也就是数组中的第 K 大元素。

代码示例:

class Solution {
    public int findKthLargest(int[] nums, int k) {
        // 初始化大小为K的最小堆
        PriorityQueue<Integer> minHeap = new PriorityQueue<>(k); 
        
        // 先将前K个元素加入堆中
        for(int i = 0; i < k; ++i) {
            minHeap.offer(nums[i]);
        }
        
        // 遍历剩余的元素
        for(int i = k; i < nums.length; ++i) {
            // 如果当前元素大于堆顶元素,则替换堆顶元素
            if(nums[i] > minHeap.peek()) {
                minHeap.poll(); // 弹出堆顶最小元素
                minHeap.offer(nums[i]); // 插入当前元素
            }
        }
        
        // 堆顶元素即为第K大的元素
        return minHeap.peek();
    }
}

逻辑解释:

  • 前 K 个元素入堆:在初始化阶段,先将前 K 个元素放入堆中,这一步确保了堆的初始状态是我们想要的(即包含前 K 个元素中的最小值)。

  • 比较和替换:之后,遍历数组中剩余的元素,对于每个元素,我们都与堆顶的最小元素进行比较。只有当当前元素大于堆顶元素时,才会进行替换操作,这样可以确保堆中存放的始终是 K 个最大的元素。

  • 返回结果:最终,当所有元素遍历完毕,堆顶元素就是这 K 个最大元素中的最小值,也就是数组中的第 K 大元素。

更容易理解的原因:

  1. 分步操作:先填充 K 个元素,然后逐步检查和替换剩余元素。将这两部分逻辑分开后,代码的意图非常明确。
  2. 显式的比较:通过 nums[i] > minHeap.peek() 来进行比较,显式地告诉读者当前元素是否应该被插入到堆中,这样逻辑显得更加直观。
  3. 清晰的堆维护:对于每一个新元素,如果它大于堆顶元素,就替换堆顶,使得堆始终维护着当前 K 个最大的元素。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205133.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware ESXi 8.0d 发布下载 - 领先的裸机 Hypervisor

VMware ESXi 8.0d 发布下载 - 领先的裸机 Hypervisor ESXi 8.0 标准版&#xff0c;Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮) OEM 定制版 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-esxi-8/ 查看最新版。原创作品&#xff0c;转载请保留出处。…

基于Python的程序员薪资数据分析和可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

Detectron2和LSTM进行人体动作识别

关于深度实战社区 我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色…

魅族Lucky 08惊艳亮相:极窄四等边设计引领美学新风尚

在这个智能手机设计趋于同质化的时代&#xff0c;魅族以其独特的设计理念和创新技术&#xff0c;再次为市场带来了一股清新之风。 近日&#xff0c;魅族全新力作——Lucky 08手机正式曝光&#xff0c;其独特的“极窄物理四等边”设计瞬间吸引了众多消费者的目光&#xff0c;而…

国外电商系统开发-运维系统命令记录

在【命令执行】功能中&#xff0c;所有的命令执行记录均被记录到了这里。 关于【状态】的解释&#xff1a; 成功&#xff1a;表示执行命令是正确的&#xff0c;也就是说echo $?的值是0&#xff1b; 失败&#xff1a;表示执行的命令可能是失败的&#xff0c;也可能是服务器的问…

影视飓风得罪了谁?

影视飓风 近日&#xff0c;B 站知名 Up 主「影视飓风」发布了一期视频&#xff0c;名字为《清晰度不如4年前&#xff01;视频变糊是你的错觉吗&#xff1f;》&#xff0c;但因为背后牵扯的利益太重&#xff0c;最终视频不得已全网下架。 没有第一时间看过视频的你&#xff0c;相…

019 spu、sku 条件检索

文章目录 spuSpuInfoController.javaSpuInfoServiceImpl.java skuSkuInfoController.javaSkuInfoServiceImpl.java 没有做分类检索功能 spu SpuInfoController.java /*** 列表*/RequestMapping("/list")//RequiresPermissions("product:spuinfo:list")pub…

牛客SQL29详解 计算用户的平均次日留存率

牛客SQL29详解 计算用户的平均次日留存率 牛客SQL29详解 计算用户的平均次日留存率 叮嘟&#xff01;这里是小啊呜的学习课程资料整理。好记性不如烂笔头&#xff0c;今天也是努力进步的一天。一起加油进阶吧&#xff01; 牛客SQL29详解 计算用户的平均次日留存率 题目&#x…

一、安装VMWARE和CentOS

一、安装VMware 1、基本说明 学习Linux需要一个环境&#xff0c;我们需要创建一个虚拟机&#xff0c;然后在虚拟机上安装一个Centos系统来学习 先安装virtual machine 15.5再安装Linux(CentOS 7.6/centos8.1)原理示意图 2、vmware15.5下载 官方地址:https://www.vmware.com/…

Map的实现类:HashMap

在API获取HsahMap类的全部信息 实例代码&#xff1a;创建一个Student类和Demo02 package com.map;public class Student {private String name;private int stuNo;public Student(String name, int stuNo) {this.name name;this.stuNo stuNo;}public String getName() {retu…

springboot酒店在线预订系统

基于springbootvue实现的酒店在线预订系统 &#xff08;源码L文ppt&#xff09;4-082 4.2 系统结构设计 构图是系统的体系结构&#xff0c;体系结构是体系结构体系的一部分&#xff0c;体系结构体系是体系结…

模型案例:| 野生鸟类检测模型!

导读 2023年以ChatGPT为代表的大语言模型横空出世&#xff0c;它的出现标志着自然语言处理领域取得了重大突破。它在文本生成、对话系统和语言理解等方面展现出了强大的能力&#xff0c;为人工智能技术的发展开辟了新的可能性。同时&#xff0c;人工智能技术正在进入各种应用领…

24.4 基于consul服务发现模式

本节重点介绍 : consul 安装consul go代码注册服务&#xff0c;注销服务&#xff0c;获取服务node_exporter改造为consul服务发现在数量比较大时&#xff0c;在注册服务的时候&#xff0c;关闭check&#xff0c;可以降低consul的压力 consul 安装 准备工作 # 下载consul wge…

实践体验密集小目标检测,以小麦麦穗颗粒为基准,基于YOLOv9全系列【yolov9/t/s/m/c/e】参数模型开发构建智能精准麦穗颗粒检测计数系统

对于常规的目标检测任务来说&#xff0c;诸如&#xff1a;COCO、VOC这类基础的数据场景&#xff0c;涌现出来了一些列性能初衷的检测模型&#xff0c;YOLO系列就是其中的佼佼者&#xff0c;不断地刷榜取得了越来越好的效果&#xff0c;不过这些评测指标是基于COCO、VOC这类公开…

信息系统项目管理师(十大管理域、五大过程组)

前言&#xff1a;信息系统项目管理师重点掌握每个过程中的ITO&#xff0c;即输入(Inputs)、工具(Tools)、输出(Outputs)。还有每个过程属于哪个过程组。 十大管理&#xff1a;整体管理、范围管理、进度管理、成本管理、质量管理、人力资源管理、沟通管理、干系人管理、风险管理…

猫头虎分享:Python库 Django 的简介、安装、用法详解入门教程

猫头虎分享&#xff1a;Python库 Django 的简介、安装、用法详解入门教程 &#x1f680;&#x1f40d; 今天猫头虎收到了一位粉丝的问题&#xff1a;“猫哥&#xff0c;如何在项目中使用Django搭建一个Web应用呢&#xff1f;”。这可是很多刚接触Python开发的朋友常遇到的困惑…

C++和OpenGL实现3D游戏编程【连载14】——VBO、VAO和EBO应用

&#x1f525;C和OpenGL实现3D游戏编程【目录】 1、本节实现的内容 我们从一开始学OpenGL到现在&#xff0c;OpenGL的图形绘图必须在glBegin()和glEnd()函数之间完成&#xff0c;在此基础之上&#xff0c;才能进行后续操作功能。但是我们今天要讨论一下OpenGL图形绘制的模式&a…

前端父子传递属性值

1. Vue3.4.X之前 &#xfeff; 2. Vue3.4.X之后版本 defineModel 父页面 &#xfeff; 子页面 &#xfeff; &#xfeff; &#xfeff;

Python | Leetcode Python题解之第463题岛屿的周长

题目&#xff1a; 题解&#xff1a; class Solution:def islandPerimeter(self, grid: List[List[int]]) -> int:rowlen(grid)collen(grid[0])nums0c0gridgrid[[0]*col]for i in range(row):grid[i].append(0)for j in range(col):if grid[i][j]1:nums1if grid[i][j]1 and …

跨境独立站还能做多久?谈谈独立站的长期价值

这几年&#xff0c;品牌出海与跨境独立站成了商业圈子的热门话题。伴随而来的则是日益激烈的市场竞争&#xff0c;不少新入局的卖家纷纷抱怨&#xff1a;“现在做独立站已经赚不到钱了&#xff01;”都发出了灵魂拷问&#xff0c;**跨境独立站还能做几年&#xff1f;**跨境电商…