TopK问题

    科技2022-08-20  119

    TopK问题有两种常见的解决方式,一种是利用堆,一种是利用快速排序的partition过程。

    一,堆

    import heapq class Finder: def findKth(self, a, n, K): b = list(map(lambda x:-x, a)) heapq.heapify(b) for _ in range(K-1): heapq.heappop(b) return -heapq.heappop(b)

    二,随机快排

    class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: len_nums = len(nums) def partition(nums, low, high, pivot): l = low - 1 r = high + 1 h = low while h < r: if nums[h] < pivot: l += 1 nums[h], nums[l] = nums[l], nums[h] h += 1 elif nums[h] == pivot: h += 1 else: r -= 1 nums[h], nums[r] = nums[r], nums[h] return l+1, r-1 low = 0 high = len_nums-1 while low <= high: pivot = random.randint(low, high) pi_l, pi_r = partition(nums, low, high, nums[pivot]) if pi_l <= len_nums - k <= pi_r: return nums[pi_l] elif pi_l > len_nums - k: high = pi_l - 1 elif pi_r < len_nums - k: low = pi_r + 1

     

    Processed: 0.018, SQL: 9