在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
示例 1:
輸入: [3,2,1,5,6,4] 和 k = 2
輸出: 5
示例 2:
輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4
輸出: 4
class
solution
(object):
deffindkthlargest
(self, nums, k)
:"""
:type nums: list[int]
:type k: int
:rtype: int
"""# return sorted(nums)[-k]
# return heapq.nlargest(k,nums)[-1]
heap =
for num in nums:
iflen
(heap)
else
:if num>heap[0]
: heapreplace(heap, num)
return heap[
0]
快速排序從大到小,只關心pivot的索引和k的大小
class
solution
:def
findkthlargest
(self, nums: list[
int]
, k:
int)
->
int:
left =
0 right =
len(nums)-1
while
true
: idx = self.partation(nums, left, right)
if idx == k -1:
# 注意索引從0開始
return nums[idx]
if idx < k -1:
left = idx +
1if idx > k -1:
right = idx -
1def
partation
(self, nums, left, right)
: pivot = nums[right]
flag = left -
1for i in
range
(left, right)
:if nums[i]
>= pivot:
# 注意此處是從大到小的快排,大的放前面,小的放後面
flag +=
1 nums[flag]
, nums[i]
= nums[i]
, nums[flag]
nums[flag +1]
, nums[right]
= nums[right]
, nums[flag +1]
return flag +
1
陣列中的第k個最大元素
在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。示例 1 輸入 3,2,1,5,6,4 和 k 2 輸出 5 示例 2 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4 說明 你可以假設 k 總是有效的,且 1...
陣列中的第K個最大元素
題目 在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。法一 排序後輸出。法二 優先佇列 堆 法三 利用快速排序的方法。在這裡僅介紹法三,法一法二呼叫庫函式即可。思路 首先,找第k個最大的元素,即是找第n k 1個最小的元素。...
陣列中的第K個最大元素
在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。示例 1 輸入 3,2,1,5,6,4 和 k 2 輸出 5 示例 2 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4 說明 你可以假設 k 總是有效的,且 1...