题解 | #寻找第K大#

寻找第K大

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

快速排序法
注意第K大实际上是排序后的第K-1位 晕死
class Solution {
public:
    int partition(vector<int> &a, int left, int right){
        int first = a[left];
        while(left < right){
            while(left < right && first >= a[right]){
                right --;
            }
            if(first < a[right]){
                a[left++] = a[right];
            }
            while(left <right && a[left] >= first){
                left ++;
            }
            if(a[left] < first){
                a[right--] = a[left];
            }
        }
        a[left] = first;
        return left;
    }
    int quickSort(vector<int> &a, int left, int right, int K){
        int pos = partition(a, left, right);
        if(pos == K-1) return a[K-1];
        else if(pos < K-1){
            return quickSort(a, pos+1, right, K);
        }else{
            return quickSort(a, left, pos-1, K);
        }
    }
    int findKth(vector<int> a, int n, int K) {
        int res = quickSort(a, 0, n-1, K);
        return res;
    }
};


全部评论

相关推荐

11-20 17:33
已编辑
门头沟学院 嵌入式工程师
小米汽车 底软测开岗 n*15(15大概率拿不到) 双非硕
点赞 评论 收藏
分享
粗心的雪碧不放弃:纯学历问题,我这几个月也是一直优化自己的简历,后来发现优化到我自己都觉得牛逼的时候,发现面试数量也没有提升,真就纯学历问题
点赞 评论 收藏
分享
HNU_fsq:建议直接出国,这简历太6了。自愧不如
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务