力扣 215. 数组中第K个最大元素

无脑解法,根本思想是排序解决

1
2
3
def findKthLargest(nums, k):
nums.sort()
return nums[-k]

大顶堆

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
26
27
28
29
30
31
32
33
def findKthLargest(nums, k):
# 以大顶堆实现
nums_len= len(nums)

# 建堆处理
for i in range(1, nums_len):
# 父节点
j = (i - 1) >> 1
while i > 0:
if nums[i] > nums[j]:
nums[i], nums[j] = nums[j], nums[i]
i, j = j, (j - 1) >> 1
# print(nums)
# 堆排序
nums_len -= 1
for _ in range(k - 1):
nums[0], nums[nums_len] = nums[nums_len], nums[0]
nums_len -= 1
j = 0
while j <= nums_len:
l, r, i = 2 * j + 1, 2 * j + 2, j
if l <= nums_len and nums[l] > nums[i]:
i = l
if r <= nums_len and nums[r] > nums[i]:
i = r
if i != j:
nums[i], nums[j] = nums[j], nums[i]
j = i
else:
break

# print(nums)
return nums[0]
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2022 eightyninth
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信