215. 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
Solution1:
1 2 3 4 5 6 7
| class Solution { public: int findKthLargest(vector<int>& nums, int k) { std::sort(nums.begin(),nums.end()); return nums[nums.size()-k]; } };
|
思路:
直接使用sort()函数。将倒数第K的元素直接返回。
这样做的复杂度就为sort函数的复杂度。
Solution2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| #include <vector> #include <queue> class Solution { public: int findKthLargest(vector<int>& nums, int k) { std::priority_queue<int, std::vector<int>, std::greater<int> > Q; for(int i = 0; i < nums.size(); i++){ if(Q.size() < k){ Q.push(nums[i]); }else if(Q.top() < nums[i]){ Q.pop(); Q.push(nums[i]); } } return Q.top(); } };
|
思路:
使用最小堆。
维护一个K大小的最小堆。
最小堆的堆顶始终为最小元素。当有比堆顶更大的时候,让更大的元素进堆,堆顶的元素出堆。这样遍历一遍后。第K大的元素就到了堆顶。直接弹出即可。