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
Last updated