题目描述
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
题目:
利用快排+二分
题解:
class Finder {
public:
int findKth(vector<int> a, int n, int K) {
// write code here、
return find(a,0,n-1,n-K+1);
}
int find(vector<int>&a,int l,int r,int K)
{
if(l==r) return a[l];
int i=l-1;
int j=r+1;
int x=a[l+r>>1];
while(i<j)
{
do i++;while(a[i]<x);
do j--;while(x<a[j]);
if(i<j) swap(a[i],a[j]);
}
int s=j-l+1;
if(K<=s) return find(a,l,j,K);
else return find(a,j+1,r,K-s);
}
};