Question 215: Kth Largest Element in an Array

Difficulty: Medium

题目描述

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。

示例:

输入: [3,2,1,5,6,4] 和 k = 2输出: 5
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4输出: 4

说明:

你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

题目分析

显然这道题可以先排序,再去找第K大的值,但这种暴力解法显然不是最优解。在这里我们可以维护一个大小为K最小堆minheap来实现。

本题目的算法并不难,但我们需要了解一下的概念。

关于堆

堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针。堆根据“堆属性”来排序,“堆属性”决定了树中节点的位置。

堆的常用方法:

•构建优先队列•支持堆排序•快速找出一个集合中的最小值(或者最大值)

堆分为两种:最大堆 和 最小堆,两者的差别在于节点的排序方式。

在最大堆中,父节点的值比每一个子节点的值都要大。在最小堆中,父节点的值比每一个子节点的值都要小。这就是所谓的“堆属性”,并且这个属性对堆中的每一个节点都成立。

这是一个最大堆,,因为每一个父节点的值都比其子节点要大。10 比 7 和 2 都大。7 比 5 和 1都大。

根据这一属性,那么最大堆总是将其中的最大值存放在树的根节点。而对于最小堆,根节点中的元素总是树中的最小值。堆属性非常的有用,因为堆常常被当做优先队列使用,因为可以快速的访问到“最重要”的元素。

题解

显然,遍历数组中的元素,并维护一个大小为K的minHeap,最后堆顶元素即为所求。遍历每个元素,并每次都要进行一次heapify,则时间复杂度为O(N log K),由于维护了大小为K的minHeap则空间复杂度为O(log K)

//Java 解法class Solution {    public int findKthLargest(int[] nums, int k) {        PriorityQueue<Integer> minHeap = new PriorityQueue<>(k,        new Comparator<Integer>(){            @Override            public int compare(Integer o1, Integer o2){                if(o1.equals(o2)) return 0;                return o1 < o2 ? -1 : 1;            }        }                                                            );        for(int i = 0; i < nums.length; i++){            if(minHeap.size() < k){                minHeap.add(nums[i]);            }else if(nums[i] > minHeap.peek()){                minHeap.poll();                minHeap.add(nums[i]);            }        }        return minHeap.poll();    }}
#python 解法class Solution:    def findKthLargest(self, nums, k):        """        :type nums: List[int]        :type k: int        :rtype: int        """        return heapq.nlargest(k, nums)[-1]

vector删除第i个元素_LeetCode每日一题 Q215数组中的第K个最大元素相关推荐

  1. [Leedcode][第215题][JAVA][数组中的第K个最大元素][快排][优先队列]

    [问题描述][中等] 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素.示例 1:输入: [3,2,1,5,6,4] 和 k ...

  2. 215.数组中的第K个最大元素/347. 前 K 个高频元素

    2020-05-25 1.题目描述 数组中的第K个最大元素 2.题解 1.使用冒泡排序 2.使用快速排序 3.优先队列(内部是用堆来实现的) 3.代码 class Solution { public: ...

  3. 数组中的第K个最大元素

    数组中的第K个最大元素 在未排序的数组中找到第k个最大的元素.请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素. 示例 输入: [3,2,1,5,6,4] 和 k = 2 输出 ...

  4. 215. 数组中的第 K个最大元素

    215. 数组中的第 K个最大元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数 组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5 ...

  5. LC215. 数组中的第K个最大元素

    题目介绍 数组中的第K个最大元素 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素. 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 输入: [ ...

  6. 在数组中查找第k个最大元素_查找数组中每个元素的最近最大邻居

    在数组中查找第k个最大元素 Problem statement: 问题陈述: Given an array of elements, find the nearest (on the right) g ...

  7. 【LeetCode】【HOT】215. 数组中的第K个最大元素(优先队列)

    [LeetCode][HOT]215. 数组中的第K个最大元素 文章目录 [LeetCode][HOT]215. 数组中的第K个最大元素 package hot;import java.util.Co ...

  8. LeetCode——215,数组中的第K个最大元素(分治法)

    尹成老师带你学算法 /*** \* Created: liuhuichao* \* Date: 2020/1/27* \* Time: 11:32 上午* \* Description: 数组中的第K ...

  9. 力扣(LeetCode)215. 数组中的第K个最大元素(C语言)

    一.环境说明 本文是 LeetCode 215题 : 数组中的第K个最大元素,使用c语言实现. 快速选择.查找无序数组的利器! 测试环境:Visual Studio 2019. 二.代码展示 void ...

最新文章

  1. 一个多maven项目聚合的实例
  2. jenkins 忘记密码_持续集成工具Jenkins 在CentOS系统下安装
  3. MapReduce: 提高MapReduce性能的七点建议【译】
  4. java后期发展方向_2020年前3季度工程自卸车市场咋样?后期朝啥方向发展?
  5. 印度孟买机器人餐厅_印度孟买自动化展:该国最重要、规模最大的国际自动化展...
  6. [daily] fedora用过光盘做dnf repo
  7. By Recognizing These Guys, We Find Social Networks Useful(HDU-3849)
  8. Linux(debian7)操作基础(十四)之文本搜索命令grep使用方法
  9. python爬虫教程-Python爬虫入门教程——爬取自己的博客园博客
  10. 什么是波导的简并波,矩形波导和圆波导中的简并有何异同
  11. 基于asp.net729在校大学生助学贷款管理系统
  12. python移动文件,将一个文件夹里面的文件移动到另一个文件夹
  13. MySQL Workbench 8.0 CE 汉化包下载
  14. VGA分辨率无法识别或错误通过添加自定义配置参数正确显示(Ubuntu/Windows)
  15. 【深度学习】眼底图像之视盘和黄斑分割的探索
  16. 故障排查:阿里云轻量应用服务器中的MySQL容器自行停止
  17. 21天转型容器实战营(八容器进阶之Kubernetes 应用生命周期原理分析)
  18. 站内搜索 迅搜xunsearch 中小型网站的福音
  19. 阅读vue3官方文档之摘录
  20. 奇兔recovery卡刷教程_奇兔开发者学院课程教学第四讲: Recovery备份提取制作ROM

热门文章

  1. Linux 中的进程管理
  2. 前沿分享|阿里云数据库解决方案资深专家 李圣陶:云原生数据库解决方案 加速企业国产化升级
  3. 《Saas模式云原生数据仓库应用场景实践》激活数据生产力,让分析产生价值
  4. 技术与商业到底啥关系?我们从业务角度聊一聊
  5. 基于 Unity 中的 NGUI 插件,通用的 UI 如何设计
  6. SQL Server语句大全(增删改查数据、创建表、删除表、修改表)
  7. VS code 使用 Remote-SSH 进行python远程开发
  8. 修改大表字段属性报主键冲突
  9. 如何解决AIX的文件系统故障
  10. CONFIGURE CONTROLFILE AUTOBACKUP ON/OFF;