1. 基于快速排序实现
#include <iostream>
#include<vector>
using namespace std;
int partition(vector<int>& array, int left, int right){
int povit = array[right];
int i = left, j = right -1;
while (i <= j){
if (array[i] <= povit){
i++;
}
else if (array[j] > povit){
j--;
}
else{
swap(array[i], array[j]);
}
}
swap(array[i], array[right]);
return i;
}
int findKthLargest(vector<int>& nums, int k) {
int targetIndex = nums.size() - k;
int left = 0, right = nums.size() - 1;
while(left <= right){
int curIndex = partition(nums, left, right);
if (curIndex == targetIndex){
cout<< nums[curIndex]<<endl;
return 0;
}
else if (curIndex < targetIndex){
left = curIndex + 1;
}
else {
right = curIndex - 1;
}
}
return 0;
}
int main()
{ vector<int> arr={9,8,7,6,5,4,3,2,1};
findKthLargest(arr,3);
cout << "Hello world!" << endl;
return 0;
}
2. 基于小顶堆实现
#include <iostream>
#include<vector>
#include<queue>
using namespace std;
int findKthLargest(vector<int>& nums, int k) {
priority_queue<int, vector<int>, greater<int>> Q;
for(auto &num: nums){
if(Q.size()==k){
if(num>Q.top()){
Q.pop();
Q.push(num);
}
}
else{
Q.push(num);
}
}
cout<<Q.top()<<endl;
return 0;
}
int main()
{ vector<int> arr={9,8,7,6,5,4,3,2,1};
findKthLargest(arr,3);
cout << "Hello world!" << endl;
return 0;
}