天天看点

215 Kth Largest Element in an Array

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.

Example 1:

Input: [3,2,1,5,6,4] and k = 2
Output: 5
Example 2:

Input: [3,2,3,1,2,4,5,5,6] and k = 4
Output: 4
Note: 
You may assume k is always valid, 1 ≤ k ≤ array's length.
           

2 尝试解

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        vector<int> saver(k,INT_MIN);
        for(int i = 0; i < nums.size(); i++){
            int replace = 0;
            while(replace < saver.size() && nums[i] > saver[replace])
                replace++;
            if(replace != 0){
                saver.erase(saver.begin());
                saver.insert(saver.begin()+replace-1,nums[i]);
            }
        }
        return saver[0];
    }
};
           

3 标准解

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int, vector<int>, greater<int>> pq;
        for (int num : nums) {
            pq.push(num);
            if (pq.size() > k) {
                pq.pop();
            }
        }
        return pq.top();
    }
};