leetcode215 陣列中的第K個最大元素

2021-10-05 18:39:30 字數 1232 閱讀 8811

在未排序的陣列中找到第 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...