在未排序的陣列中找到第 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個數即可;
方法二:
維護乙個大小為k個小根堆。若當前元素大於堆頂元素,則彈出堆頂元素,並將當前元素放入堆中;
class
solution
; priority_queue<
int, vector<
int>
, greater<
int>>q;
for(
int i =
0; i < k; i++
)for
(int i = k; i < nums.
size()
; i++)}
return q.
top();
}};
方法三:
使用快排中的思想。假設當前查詢的範圍是left~right
,尋找第k
大的數字。則在範圍left ~right
上對陣列進行一次partition,返回的下標即為index
。
class
solution
intfindtopk
(vector<
int>
& nums,
int k,
int left ,
int right)
intpartition
(vector<
int>
& nums,
int left,
int right)
swap
(nums[left]
, nums[end]);
return end;}}
;
LeetCode 215 陣列中的第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...
LeetCode 215 陣列中的第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...
Leetcode215 陣列中的第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...