1. 程式人生 > >leetcode 215. 陣列中的第K個最大元素

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 ≤ k ≤ 陣列的長度。

程式碼:

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int,vector<int>,greater<int> >q;//從小到大排列
        for(auto num:nums){
            q.push(num);
            if(q.size()>k)
                q.pop();
        }
        return q.top();
    }
};

註解:

1.優先佇列不寫排序方式預設是小頂堆(元素是從大到小排序),top()是取頭部元素的意思。

2.優先佇列取首部使用top()函式,與棧是一樣的。佇列取首部使用front()函式(取尾部使用back()函式)。

3.優先佇列priority_queue可以存放pair結構,排序方式按pair第一個值排序。

4.訪問map下標和值分別用first和second.