Leetcode 215. Kth Largest Element in an Array

题目描述:返回第K大的数字。

Leetcode 215. Kth Largest Element in an Array

思路:堆排,建立大顶堆,从小到大排序,找到第K大的。初步思路要有heapfy函数以及建堆函数。len全局长度是len 然后整除 // 然后left +1 +2 下标0开始。

代码如下:

class Solution:
    def buildMaxheap(self,arr):
        for i in range(self.l//2,-1,-1):
            self.heapfy(arr,i)
    
    def heapfy(self,arr,idx):
        left = 2 * idx + 1
        right = 2* idx + 2
        largest = idx
        if left < self.l and arr[left] > arr[largest]:
            largest = left
        if right < self.l and arr[right] > arr[largest]:
            largest = right
        if(largest != idx):
            arr[idx],arr[largest] = arr[largest],arr[idx]
            self.heapfy(arr,largest)
        
    def heapSort(self,arr,k):
        self.l = len(arr)
        self.buildMaxheap(arr)
        for i in range(len(arr)-1,len(arr)-k-1,-1):
            arr[0],arr[i] = arr[i],arr[0]
            self.l -= 1
            self.heapfy(arr,0)
        # print(arr)
        return arr[-k]

    def findKthLargest(self, nums, k):
        """
        :type nums: List[int]
        :type k: int
        :rtype: int
        """
        return self.heapSort(nums,k)
        
        # return ans

Leetcode 215. Kth Largest Element in an Array