这个题解使用了快速选择(QuickSelect)算法来找到数组中第k大的元素。其基本思路是:通过随机选择一个基准元素 pivot,将数组划分为三个部分:大于 pivot 的元素、小于 pivot 的元素和等于 pivot 的元素。根据这三部分元素的数量,可以确定第 k 大的元素在哪个部分中,然后递归地在相应的部分继续查找,直到找到第 k 大的元素。
时间复杂度: O(n)
空间复杂度: O(log n)
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
def find(nums,k):
big,small,equal=[],[],[]
pivot=random.choice(nums) # 随机选择基准元素
for num in nums:
if num>pivot:
big.append(num) # 大于 pivot 的元素
elif num<pivot:
small.append(num) # 小于 pivot 的元素
else:
equal.append(num) # 等于 pivot 的元素
if len(big)>=k: # 第 k 大的元素在 big 部分中
res=find(big,k)
elif len(nums)-len(small)>=k: # 第 k 大的元素是 pivot
res=pivot
else: # 第 k 大的元素在 small 部分中
res=find(small,k-len(big)-len(equal))
return res
res=find(nums,k)
return res