题解 | #寻找第K大#

寻找第K大

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

思路

快排的思想,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;

    }

};
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 18:35
简历上把1个月实习写成了3个月,会进行背调吗?
码农索隆:一个月有一个月的实习经历,三个月有三个月的实习经历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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