题解 | 寻找第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;
    }
};

全部评论

相关推荐

野猪不是猪🐗:我assume that你must技术aspect是solid的,temperament也挺good的,however面试不太serious,generally会feel style上不够sharp
点赞 评论 收藏
分享
每晚夜里独自颤抖:把华北改为华南再试一试,应该就没啥问题了。改完可能都不用投,别人主动联系了。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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