1、题目
有一个整数数组,请你根据快速排序的思路,找出数组中第 k 大的数。
给定一个整数数组 a ,同时给定它的大小n和要找的 k ,请返回第 k 大的数(包括重复的元素,不用去重),保证答案存在。
如输入:[1,3,5,2,2],5,3
输出:2
2、思路
思路一,采用选择排序的思想,用i遍历0~n的位置,找出i~n位置的最大数,当i==K-1的时候返回a[i]。
3、代码
思路一代码:
class Solution {
public:
int findKth(vector<int> a, int n, int K) {
// write code here
for(int i=0; i<n; i++){
int maxindex = i;
for(int j=i+1; j<n; j++){
maxindex = a[j] > a[maxindex] ? j : maxindex;
}
this->swap(a, maxindex, i);
if(i==K-1){
return a[i];
}
}
return 0;
}
void swap(vector<int> &a, int maxindex, int j){
int tmp = a[maxindex];
a[maxindex] = a[j];
a[j] = tmp;
}
};