寻找第K大

寻找第K大

有一个整数数组,找出数组中第K大的数。

给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

class Solution {
public:
    //使用优先队列(默认大顶堆)
//     int findKth(vector a, int n, int K) {
//         priority_queue,greater> pqueue; //默认大顶堆,使用小顶堆需要使用 greater
//         int index = 0;
//         while(index < K)
//         {
//             pqueue.push(a[index]);
//             ++index;
//         }
//         while(indexminValue)
//             {
//                 pqueue.pop();
//                 pqueue.push(a[index]);
//             }
//             ++index;
//         }
//         return pqueue.top();
//     }
    
    //使用快排的思想,先分割,若右侧数字个数不够K个,则从左侧找第k-bigNum-1大的数,如果右侧数字个数比K多,则在右侧找第K大的数
    int quickFind(vector& a, int left, int right, int K)
    {
        int i = left, j = right;
        int mark = a[left];
        while(i < j)
        {
            while(i= mark)
                --j;
            a[i] = a[j];
            while(i a, int n, int K)
    {
        return quickFind(a, 0, n-1, K);
    }
};

你可能感兴趣的:(Leetcode,数据结构,算法,leetcode)