215. Kth Largest Element in an Array

Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.

For example,
Given [3,2,1,5,6,4] and k = 2, return 5.

解答:这里用了快速排序的改进版,成为快搜。就是在快排的基础上判断我们每一轮最后调换的第一个数和后面的某一位的那个数的位置,就是说假如有a个数大于第一个数(因为是找第k大的数,所以大于第一个数的数字放前面,小于第一个数的数字放后面),我们判断一下a和k的关系以决定这个是不是我们要找的数。

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        if(nums.empty()) return 0;
        return quicksearch(nums,0,nums.size()-1,k);    
    }
    int quicksearch(vector<int>& nums,int begin,int end ,int k){
        int l=begin;
        int first=nums[begin];
        for(int r=l+1;r<=end;r++){
            if(nums[r]>first) swap(nums[++l],nums[r]);          
        }
        swap(nums[begin],nums[l]);
        if(l==k-1) return nums[l];
        else if(l<k-1) return quicksearch(nums,l+1,end,k);
        else return quicksearch(nums,begin,l-1,k);    
    }

};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值