题解 | #寻找第K大#

寻找第K大

http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf

两种实用方法,没啥难点,代码自己看吧

class Solution {
public:
int findKth(vector<int> a, int n, int K) {
    multiset<int, greater<int>> multy(a.begin(), a.end());
    auto it = multy.begin();
    for (int i = 1; i < K; i++) {
        it++;
    }
    return *it;
    
    // 最大堆
    priority_queue<int,vector<int>,less<int>> maxHeap;
    // 最小堆
    priority_queue<int, vector<int>, greater<int>> minHeap;
    
    for (auto it = a.begin(); it != a.end(); it++) {
        if (minHeap.size() < K) {
            minHeap.push(*it);
        } else if (minHeap.top() < *it) {
            maxHeap.push(minHeap.top());
            minHeap.pop();
            minHeap.push(*it);
        } else {
            maxHeap.push(*it);
        }
        
    }
    return minHeap.top();
    // write code here
}
};
全部评论

相关推荐

01-12 19:02
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务