题解 | 寻找第K大

寻找第K大

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

class Solution {
public:
  //完整快速排序后,第K大的数一定在K-1的下标处;
  //利用二分法, 减少处理;
    int findKth(vector<int>& a, int n, int K) {
        return quikSelect(a, 0, n-1, K-1);
    }

    int quikSelect(vector<int>& a, int left, int right, int k){
        if(left == right) return a[left];

        int pivotIndex = partition(a, left, right);

        if(pivotIndex == k){
            return a[pivotIndex];
        }else if(pivotIndex > k){
            return quikSelect(a, left, pivotIndex-1, k);
        }else if(pivotIndex < k){
            return quikSelect(a, pivotIndex+1, right, k);
        }

        return -1;
    }

    int partition(vector<int>& a, int left, int right){  //快速排序
        int pivot = a[right];
        int i=left;

        for(int j=left; j<right; ++j){
            if(a[j] > pivot){
                swap(a[i], a[j]);
                ++i;
            }
        }

        swap(a[i], a[right]);
        return i;
    }
};

全部评论

相关推荐

迟缓的斜杠青年巴比Q了:简历被投过的公司卖出去了,我前两天遇到过更离谱的,打电话来问我有没有意向报班学Java学习,服了,还拿我学校一个学长在他们那报班学了之后干了华为OD当招牌
点赞 评论 收藏
分享
05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
机械打工仔:第一位颇有孟德之志
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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