classSolution: defmaxHeap(self,nums:[int],i:int,heap_size:int): while1: l_i=2*i+1 r_i=2*i+2 lst=i if l_i<heap_size and nums[l_i]>nums[lst]: lst=l_i if r_i<heap_size and nums[r_i]>nums[lst]: lst=r_i if lst==i: break nums[i],nums[lst]=nums[lst],nums[i] i=lst defbuildmaxHeap(self,nums:[int],heap_size:int)->None: for i inrange (heap_size//2-1,-1,-1): self.maxHeap(nums,i,heap_size) deffindKthLargest(self, nums: List[int], k: int) -> int: n=len(nums) heap_size=n self.buildmaxHeap(nums,heap_size) for i inrange(1,k): nums[0],nums[n-i]=nums[n-i],nums[0] heap_size-=1 self.maxHeap(nums,0,heap_size) return nums[0]
思路1:📊 性能分析
提交结果
运行时间:423ms击败10.94%
内存消耗:30.50MB击败17.30%
复杂度验证
时间复杂度:O(Nlogn)
空间复杂度:O(1)
思路2:优先队列
思路2:代码实现
1 2 3 4 5 6 7 8 9 10
classSolution: deffindKthLargest(self, nums: List[int], k: int) -> int: result=[] for x in nums: iflen(result)<k: heapq.heappush(result,x) elif x>result[0]: heapq.heappop(result) heapq.heappush(result,x) return result[0]