Heaq sort time O(NlgK) space O(K) K = heap size

from heapq import heappop, heappush
class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        hp = []
        res = 0
        n = len(nums)
        target = n-k+1
        for num in nums:
            heappush(hp,-num)
            if len(hp) > target:
                heappop(hp)
        res = heappop(hp)
        return -res

O(N)/ O(1) Quick Selection Sort

class Solution:
    # time O(N) space O(1) on average  
    def findKthLargest(self, nums: List[int], k: int) -> int:
        # step1: initialize , recalculate k 
        size = len(nums) # arr length 
        k = size - k  # target 
        # step2: set up range   [lo,hi]
        lo,hi = 0,size-1
        while lo < hi:
            # step3:  get partition point pos, change lo,hi based on comparison with pos and k    
            pos = self.partition(nums,lo,hi)
            if pos < k:
                lo = pos+1
            elif pos > k :
                hi = j -1 
            else:# pos == k
                break
        return nums[k]
    #  partition returns a index i , where [lo,i] is less than the pivot, (i,len(arr)-1] is bigger than pivot 
    def partition(self,arr,lo,hi):
        # step1, choose pivot point 
        p = arr[hi]
        # step2, set lo point 
        i = lo 
        for j in range(lo,hi):
            if arr[j] <= p :
                arr[i],arr[j] = arr[j],arr[i]
                i += 1 
        # swap i and hi(pivot point) 
        arr[i],arr[hi] = arr[hi],arr[i]
        return i