第K大的数
思路:维护一个K大小的最小堆,堆顶就是最小的元素,新元素都比堆顶小,当堆中元素个数小于K时,直接进入堆,当堆顶小于新元素时,弹出堆顶,新元素加入堆。
#include <iostream> #include <vector> #include <queue> using namespace std; int findKthLargest(vector<int>& nums, int k) { priority_queue<int, vector<int>, greater<int> > pq; for(int i = 0; i < nums.size(); ++i) { if(pq.size() < k) { pq.push(nums[i]); } else if(pq.top() < nums[i]) { pq.pop(); pq.push(nums[i]); } } return pq.top(); } int main(int argc, const char** argv) { vector<int> nums; nums.push_back(3); nums.push_back(2); nums.push_back(1); nums.push_back(5); nums.push_back(6); nums.push_back(4); cout << findKthLargest(nums, 4); return 0; }