【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    
相关推荐
OYYHXPJR3 分钟前
【算法】区间重叠模板和矩形重叠模板
算法
shehuiyuelaiyuehao5 分钟前
算法46,分治快排,排序数组
java·算法·排序算法·排序
statistican_ABin12 分钟前
中国互联网与数字生活分析报告—基于1990-2023年世界银行互联网数据的多维度分析
python
圣保罗的大教堂13 分钟前
leetcode 3483. 不同三位偶数的数目 简单
leetcode
远航计算机22 分钟前
GEO 选题从哪来?用一份 Query 词库把一年内容排出来
大数据·人工智能·算法·aigc
宣宣猪的小花园.22 分钟前
【机器学习】神经网络与表征:为什么深度学习能自动提取特征
人工智能·嵌入式硬件·算法·机器学习
“AI国潮设计-小江”24 分钟前
【Python/SDXL实战】潮汕国潮IP视觉落地:普宁美食猫IP & 创意甜品设计(附ComfyUI工作流思路)
开发语言·人工智能·python·prompt·aigc
mmmmath_337 分钟前
LeetCode.018.四数之和
数据结构·算法·leetcode
AIGCmagic社区38 分钟前
腾讯混元 AuK 技术报告拆读:1.5B 统一语音生成与编辑,蒸馏后 4 步无 CFG 提速 4.5 倍
人工智能·算法·aigc·ai多模态
大熊背39 分钟前
基于照明色度表征的颜色恒常性的白平衡算法实现
算法·白平衡·色温·色度坐标·普朗克曲线