215. Kth Largest Element

https://leetcode.com/problems/kth-largest-element-in-an-array/

solution

https://www.geeksforgeeks.org/kth-smallest-largest-element-in-unsorted-array/

  • 直接法

# 不满足O(n)题目要求
class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        nums.sort()
        return nums[-k]

时间复杂度:O(nlogn) 空间复杂度:O(1)

  • heap/ priority queue

    • 寻找第k大的, 也就是堆里要保留前k大, 把较小的pop出去, 因此用小顶堆, python支持小顶堆.

    • 寻找第k小的, 就要用大顶堆, python取负数

# 大顶堆和小顶堆都能实现, 但复杂度不一样,nlogn 或 nlogk

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        heap = []
        for num in nums:
            heapq.heappush(heap, num)

            if len(heap) > k:
                heapq.heappop(heap)
        return heap[0]

时间复杂度:O(nlog(k)) 空间复杂度:O(k)

  • quick sort/ quick select

    • Quick Select 的时间复杂度会退化为 O(n^2), 优化方法: 随机pivot, 三数取中法(Median of Medians)

时间复杂度:O(n) -> O(n^2) 空间复杂度:O(1)

  • binary search

时间复杂度:O() 空间复杂度:O()

  • bucket sort

follow up

373. Find K Pairs with Smallest Sums

  • 超时: 注意已排序

时间复杂度:O(klog(k)) 空间复杂度:O(k)

378. Kth Smallest Element in a Sorted Matrix

Median of an unsorted array using Quick Select Algorithm

1985. Find the Kth Largest Integer in the Array

703. Kth Largest Element in a Stream

Last updated