classSolution:deffindKthLargest(self, nums: List[int], k:int)->int:# 方法一:可以通过快速排序来获取结果return self.quicksort(nums)[len(nums)- k]defquicksort(self,nums: List[int]):# 基线条件,为空或者只包含一个元素的数组是有序的iflen(nums)<2:return nums
else:# 递归条件
pivot = nums[0]# 由所有小于基准值的元素组成
less =[i for i in nums[1:]if i<= pivot]# 由所有大于基准值的元素组成
greater =[i for i in nums[1:]if i > pivot]return self.quicksort(less)+[pivot]+ self.quicksort(greater)
利用最小堆来获取结果
import heapq
classSolution:deffindKthLargest(self, nums: List[int], k:int)->int:
maxheap =[-num for num in nums]
heapq.heapify(maxheap)while k-1:
heapq.heappop(maxheap)
k -=1return-(heapq.heappop(maxheap))
利用最大堆来获取结果
usingnamespace std;#include<vector>#include<iostream>classSolution{public:voidmaxHeapify(vector<int>& a,int i,int heapSize){// 寻找左节点与右节点int l = i *2+1, r = i *2+2, largest = i;// 寻找最大结点的下标,存储到largest上if(l < heapSize && a[l]> a[largest]){
largest = l;}if(r < heapSize && a[r]> a[largest]){
largest = r;}// 进行迭代if(largest != i){swap(a[i], a[largest]);maxHeapify(a, largest, heapSize);}}// 建立最大堆voidbuildMaxHeap(vector<int>& a,int heapSize){for(int i = heapSize /2; i >=0;--i){maxHeapify(a, i, heapSize);}}// 根据最大堆来获取结果intfindKthLargest(vector<int>& nums,int k){int heapSize = nums.size();buildMaxHeap(nums, heapSize);for(int i = nums.size()-1; i >= nums.size()- k +1;--i){swap(nums[0], nums[i]);--heapSize;maxHeapify(nums,0, heapSize);}return nums[0];}};intmain(){
vector<int> nums ={1,3,4,1,8,9};
Solution heapSort;
cout<<heapSort.findKthLargest(nums,4)<< endl;return0;}