力扣热题100_堆_215_数组中的第K个最大元素

文章目录


题目链接

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

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。

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

你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例 1:

输入: 3,2,1,5,6,4, k = 2

输出: 5

示例 2:

输入: 3,2,3,1,2,4,5,5,6, k = 4

输出: 4

解题思路

思路:堆(优先队列)

  • 遍历数组元素,对于挡圈元素 num:
    • 如果优先队列中的元素个数小于 k 个,则将当前元素 num 放入优先队列中。
    • 如果优先队列中的元素个数大于等于 k 个,并且当前元素 num 大于优先队列的队头元素,则弹出队头元素,并将当前元素 num 插入到优先队列中。
  • 遍历完,此时优先队列的队头元素就是第 k 个最大元素,将其弹出并返回即可。

这里我们借助了 Python 中的 heapq 模块实现优先队列算法,这一步也可以通过手写堆的方式实现优先队列。

解题代码

python 复制代码
import heapq
class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        res = []
        for num in nums:
            if len(res) < k:
                heapq.heappush(res, num)
            elif num > res[0]:
                heapq.heappop(res)
                heapq.heappush(res, num)
        return heapq.heappop(res)

参考资料:datawhalechina

相关推荐
AI科技星9 分钟前
全域谱分析:无穷维超复数信息场分形统一场论——自然、量子、金融多重分形第一性原理完整体系(中英双语终稿)
人工智能·python·算法·金融·乖乖数学·全域数学
utf8mb4安全女神31 分钟前
【Redis数据库】哨兵集群/redis集群/安装配置/主从复制/数据持久化操作/数据结构/安全限制/PHP redis/
linux·服务器·数据结构·数据库·redis·缓存
先吃饱再说1 小时前
为什么堆能 O(log n) 插入?拆解完全二叉树的数组魔法
算法·排序算法
丘山望岳1 小时前
哈希——数据分类存储柜
数据结构·散列表
留白_2 小时前
【决策树】泰坦尼克号生存预测
算法·决策树·机器学习
hqzing2 小时前
鸿蒙 PC 底层开发技术详解(七):二进制自签名算法的实现
算法·华为·harmonyos
AI科技星2 小时前
超复数全域经济周期场与信息谱场——金融与密码学底层理论重构《0·1·∞三元一体全域超复数统一场论》系列全集(六一字不漏完整合订终版)
人工智能·算法·金融·密码学·拓扑学·乖乖数学·全域数学
AI科技星2 小时前
《01无穷全域信息场论:算子G与宇宙本体高维完备公理大典》
人工智能·python·算法·金融·乖乖数学·全域数学
Tim_102 小时前
【C++】013、空类占多少字节?
算法
Ricky_Theseus3 小时前
并查集:连通性问题
算法