1. 题目描述
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.
2. 算法分析
要求找出第k个最大值,第一想法就是对原vector做一个排序,取出 Kth largest number。第一,直接使用快速排序;第二,利用优先队列的特性(默认从大到小),每当插入一个值,自动完成排序,保证最大值在队列头,因此,当我们插入nums.size() - k + 1 个值之后(剩余 k-1个值),依次插入剩余的k-1个值,弹出的便是大于Kth largest number 的前 k-1个值,剩下的队列的top便是第k个的最大值。
3. 算法实现
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int findKthLargest(vector<int> nums, int k) {
int n = nums.size();
priority_queue<int> q;
int m = n - k + 1;
for(int i = 0; i < n; i++) {
q.push(nums[i]);
if(q.size() > m) {
q.pop();
}
}
return q.top();
}
int main() {
vector<int> nums;
int k = 2;
for(int i = 1; i < 7; i++)
nums.push_back(i);
int ans = findKthLargest(nums, k);
cout << ans << endl;
}
4. 优化设计
待续