Leetcode 215.数组中的第K个最大元素
1 题目描述(Leetcode题目链接)
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
2 题解
排序就可以了,这是堆排序的做法,由于只返回第k个大的,所以不用全排。更多关于堆/优先队列。
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
heap_size = len(nums)
def MAX_HEAPIFY(i): #维护最大堆的性质
l = 2*i + 1
r = 2*i + 2
if l < heap_size and nums[l] > nums[i]:
largest = l
else:
largest = i
if r < heap_size and nums[r] > nums[largest]:
largest = r
if i != largest:
nums[i], nums[largest] = nums[largest], nums[i]
MAX_HEAPIFY(largest)
for i in range(heap_size//2 - 1, -1, -1): #建堆
MAX_HEAPIFY(i)
for i in range(k-1): #堆排序
nums[0], nums[heap_size-1] = nums[heap_size-1], nums[0]
heap_size -= 1
MAX_HEAPIFY(0)
return nums[0]
内置函数是真的快。
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
nums.sort()
return nums[-k]