牛客题霸 [寻找第K大] C++题解/答案
题目描述
有一个整数数组,请你根据快速排序的思路,找出数组中第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);}
};