【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    
相关推荐
AC赳赳老秦1 小时前
OpenClaw+Power Apps 实战:自动生成 Power Apps 应用、连接 Excel 数据源
大数据·开发语言·python·serverless·excel·deepseek·openclaw
一只齐刘海的猫1 小时前
【Leetcode】找到字符串中所有字母异位词
算法·leetcode·职场和发展
海清河晏1111 小时前
数据结构 | 八大排序
数据结构·算法·排序算法
IronMurphy2 小时前
【算法五十七】146. LRU 缓存
算法·缓存
茉莉玫瑰花茶3 小时前
综合案例 - AI 智能租房助手 [ 5 ]
服务器·数据库·人工智能·python·ai
文艺倾年3 小时前
【强化学习】强化学习基本概念,20W字总结(一)
人工智能·python·语言模型·自然语言处理·面试·职场和发展·大模型
宸丶一3 小时前
Day 13:持久化记忆 - 让 Agent 拥有长期记忆
jvm·python·ai
凌波粒3 小时前
LeetCode--108.将有序数组转换为二叉搜索树(二叉树)
算法·leetcode·职场和发展
liulilittle3 小时前
KCC:在 BBR 思路上的一次探索
网络·tcp/ip·算法·bbr·通信·拥塞控制·kcc
码云骑士3 小时前
13-列表append的底层真相(上)-listobject源码中的预分配策略
开发语言·python