描述:
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
示例1
输入:
[1,3,5,2,2],5,3
返回值:
2
(题目来自牛客网)
用C++实现如下
class Solution {
public:
int findKth(vector<int> a, int n, int K) {
// write code here
//思路1,进行库函数sort排序后进行求解
vector<int> tmp = a;
sort(tmp.begin(), tmp.end()); //使用库函数sort排序
int res = tmp[n-1];
for(int i = n-1; i>0; --i) //遍历找值,找到第K大值
{
if(tmp[i]>tmp[i-1])
{
if(K == 1)
{
return tmp[i];
}
K--;
}
}
return res;
// //思路2,使用快速排序二分查找来处理,利用快速排序的特点(找出某值的合适
//位置,左边所有的值比他都小,右边的值比他都大)
//