Leetcode215陣列中第k大的數 最小堆

2021-10-03 07:52:13 字數 1196 閱讀 9850

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

時間複雜度是nlogk ,這裡k是所維護的堆的大小

當n很大時,nlogk會比 n*logn 小很多。

class

solution

}return q.

top();

//返回最小堆的堆頂元素}}

;

下面是堆的簡單語法:

二叉堆,即優先順序佇列 priority_queue,在標頭檔案queue中

最小堆:最小值先出的完全二叉樹。

最大堆:最大值先出的完全二叉樹。

假定big_heap 為乙個堆

big_heap.empty()//判斷堆是否為空,如果為空返回真

big_heap.pop()//彈出堆頂元素

big_heap.push(x)//將元素x入堆

big_heap.top()//得到堆頂元素

big_heap.size()//得到堆的大小

#include

#include

using

namespace std;

intmain()

;for

(size_t i=

0;i<6;

++i)

cout<<

"the maximum is "

)

big_heap.

push

(1000);

cout

)

"the size: "

<< big_heap.

size()

}

希望對你有幫助。

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...