题解 | #寻找第K大#

寻找第K大

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

本质上可以转换为求第n - K + 1个小的数,这样的话能继续使用堆排序去做,得到的队列的队顶值一定为我们的结果
class Solution {
public:
    int findKth(vector<int> a, int n, int K) {
        // write code here
        //找第k大的数实际上就是找第n-k + 1小的数,所以仍然采用46题的方法进行排序即可
        
        if(a.size() != n) return 0;
        
        priority_queue<int> m_que;
        
        for(int i = 0; i < n; i++)
        {
            if(m_que.size() < n - K + 1)
            {
                m_que.push(a[i]);
            }
            else
            {
                if(m_que.top() > a[i])
                {
                    //int temp = m_que.top();
                    m_que.pop();
                    m_que.push(a[i]);
                    
                }
            }
        }
        
        return m_que.top();
        
    }
};


全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务