【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    
相关推荐
_dindong15 小时前
牛客101:二叉树
数据结构·c++·笔记·学习·算法
数字化脑洞实验室16 小时前
如何理解不同行业AI决策系统的功能差异?
大数据·人工智能·算法
阿郎_201116 小时前
python自动化脚本-简化留言
python·自动化
人邮异步社区16 小时前
推荐几本学习计算机语言的书
java·c语言·c++·python·学习·golang
前端架构师-老李18 小时前
从大厂到中小公司,活下去的五个生存法则
职场和发展
小白菜又菜19 小时前
Leetcode 3370. Smallest Number With All Set Bits
算法·leetcode·职场和发展
星谷罗殇19 小时前
(七)TRPO 算法 & PPO 算法
算法·机器学习
gfdgd xi19 小时前
GXDE 内核管理器 1.0.1——修复bug、支持loong64
android·linux·运维·python·ubuntu·bug
递归不收敛20 小时前
专属虚拟环境:Hugging Face数据集批量下载(无登录+国内加速)完整指南
人工智能·笔记·git·python·学习·pycharm
我是小邵20 小时前
主流数据分析工具全景对比:Excel / Python / R / Power BI / Tableau / Qlik / Snowflake
python·数据分析·excel