数组中的第k个最大元素

数组中的第k个最大元素

1、题目

图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 = [] # 将数组加入小顶堆,堆中维护当前值最大的k个数
for num in nums:
heapq.heappush(pq, num) # 当前元素入堆
if len(pq) > k:
heapq.heappop(pq) # 堆中元素超过k个,弹出最小的那个
return pq[0] # 最后堆顶的即为第k大的数



数组中的第k个最大元素
http://example.com/2024/04/14/数组中的第k个最大元素/
作者
Z Z
发布于
2024年4月14日
许可协议