【LeetCode】每日一题:数组中的第K大的元素

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

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

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

解题思路

第一种是快排,快排逻辑是以一个元素作为哨兵,通过头尾指针逼近和交换元素的方法找到该哨兵的位置,此题中额外使用k进行剪枝。

第二种思路是使用堆heapify,这种方式会默认生成一个大根堆,可以通过"ListNode.lt = lambda a, b: a.val < b.val # 让堆可以比较节点大小",然后直接使用heappop返回当前最小值。

AC代码

python 复制代码
class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        # def quicksort(nums, l, r, k):
        #     if l == r:
        #         return nums[k]
        #     i, j, key = l, r, nums[l]
        #     while i < j:
        #         while nums[i] < key: i += 1
        #         while nums[j] > key: j -= 1
        #         if i < j:
        #             nums[i], nums[j] = nums[j], nums[i]
        #     return quicksort(nums, l, j, k) if k <= j else quicksort(nums, i+1, r, k)

        # return quicksort(nums, 0, len(nums) - 1, k)

        heapify(nums)
        temp = 0
        for _ in range(len(nums) - k + 1):
            temp = heappop(nums)
        return temp    
相关推荐
MOON404☾几秒前
Chapter 002. 线性回归
算法·回归·线性回归
qq_334563551 分钟前
html标签怎么表示用户输入_kbd标签键盘快捷键标注【介绍】.txt
jvm·数据库·python
小陈工2 分钟前
数据库Operator开发实战:以PostgreSQL为例
开发语言·数据库·人工智能·python·安全·postgresql·开源
weixin_586061462 分钟前
SQL报表星型模型优化_事实表索引设计
jvm·数据库·python
耿雨飞2 分钟前
Python 后端开发技术博客专栏 | 第 07 篇 元类与类的创建过程 -- Python 最深层的魔法
开发语言·python
慕涯AI3 分钟前
Agent 30 课程开发指南 - 第21课
人工智能·python
源码之家9 分钟前
计算机毕业设计:Python城市天气数据挖掘与预测系统 Flask框架 随机森林 K-Means 可视化 数据分析 大数据 机器学习 深度学习(建议收藏)✅
人工智能·爬虫·python·深度学习·机器学习·数据挖掘·课程设计
Dxy123931021611 分钟前
Python在图片上画多边形:从简单轮廓到复杂区域标注
开发语言·python
weixin_3812881813 分钟前
MongoDB备节点无法读取数据怎么解决_rs.slaveOk()与Secondary读取权限
jvm·数据库·python
南尘NCA866614 分钟前
如何解决企业微信防封行业高封号率痛点
python·企业微信