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

169 阅读1分钟

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

在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        pivot = nums[0]  # 随机选首元素为枢轴
        left = [l for l in nums if l < pivot]
        equal = [e for e in nums if e == pivot]
        right = [r for r in nums if r > pivot]
        find = self.findKthLargest

        if k <= len(right):  # 右边的数更大,数目超过了k,就在右边找
            return find(right, k)
        elif 0 < (k - len(right)) <= len(equal):
            return equal[0]
        else:
            return find(left, k - len(right) - len(equal))
"""
快速选择(QuickSelect)算法,思路借鉴快速排序,随机选择一个枢轴。
将小于枢轴的元素移到左边,大于等于枢轴的元素移到右边。左 < pivot < 右
比较 枢轴的位置 和 N - k 以决定在哪边继续递归处理。
! 注意,本算法也适用于有重复的数组
主要用于在O(n)时间内选择出一组序列的第i个顺序统计量,即第i个最大或最小的数。
"""