数组中的第k个最大元素
1、题目
2、题解
堆排序
基本思想:堆排序(Heap
Sort)是一种基于二叉堆数据结构的排序算法,它通过将元素构建成一个最大堆或最小堆,然后重复从堆中移除根节点,直到堆为空,从而得到有序数组。堆排序是一种原地排序算法,具有稳定的时间复杂度,通常效率较高。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| def heapify(arr, n, i): largest = i left = 2 * i + 1 right = 2 * i + 2
if left < n and arr[left] > arr[largest]: largest = left
if right < n and arr[right] > arr[largest]: largest = right
if largest != i: arr[i], arr[largest] = arr[largest], arr[i] heapify(arr, n, largest)
def heap_sort(arr): n = len(arr)
for i in range(n // 2 - 1, -1, -1): heapify(arr, n, i)
for i in range(n - 1, 0, -1): arr[i], arr[0] = arr[0], arr[i] heapify(arr, i, 0)
|
这道题可以借助一个小顶堆来维护当前堆内元素的最小值,同时保证堆的大小为k:
1 2 3 4 5 6 7 8 9 10
| class Solution: def findKthLargest(self, nums: List[int], k: int) -> int: pq = [] for num in nums: heapq.heappush(pq, num) if len(pq) > k: heapq.heappop(pq) return pq[0]
|