思路

快排的思想,partition函数的使用。
如果返回的pivot>n-K,那么right = pivot-1
如果返回的pivot<n-K,那么left = pivot+1
进行新一轮的partition,直到pivot = n-K

代码

class Solution {
public:

    int partation(vector<int>& a, int L, int R){
        int left = L;
        int right = R;
        int key = a[left];
        while(left<right){
            while(left< right && a[right]>=key){
                right--;
            }
            a[left] = a[right];

            while(left< right && a[left]<=key){
                left++;
            }
            a[right] = a[left];
        }

        a[left] = key;

        return left;
    }
    int findKth(vector<int> a, int n, int K) {
        // write code here
        int left = 0;
        int right = n-1;
        while(1){
            int part = partation(a, left, right);
            if(part==n-K){
                return a[n-K];
            }
            else if(part>n-K){
                right = part-1;
            }
            else{
                left = part+1;

            }
        }
        return -1;

    }

};