// 堆排
class Solution {
public:
void adjustHeap(vector<int>& nums,int i,int len){
int tmp = nums[i];
for(int k=2*i+1;k<len;k=k*2+1){
if(k+1<len && nums[k+1] < nums[k])k++;
if(nums[k] < tmp){
nums[i] = nums[k];
i=k;
}else{
break;
}
}
nums[i] = tmp;
}
void heapSort(vector<int>& nums,int k){
for(int i=k/2-1;i>=0;i--){
adjustHeap(nums,i,k);
cout<<endl;
}
int m=k;
for(int i=m;i<=nums.size()-1;i++){
if(nums[i]>nums[0]){
swap(nums[0],nums[i]);
adjustHeap(nums,0,k);
}
cout<<endl;
}
}
int findKthLargest(vector<int>& nums, int k) {
heapSort(nums,k);
return nums[0];
}
};
//快排
int getIndex(vector<int>& nums,int low,int high){
int temp = nums[low];
while(low<high){
while(low<high && nums[high] >= temp) high--;
nums[low] = nums[high];
while(low<high && nums[low]<= temp) low++;
nums[high] = nums[low];
}
nums[low] = temp;
return low;
}
void quickSort(vector<int>& nums,int low,int high,int k){
if(low<high){
int index = getIndex(nums,low, high);
if(index == nums.size()-k) return;
quickSort(nums,low,index-1,k);
quickSort(nums,index+1,high,k);
}
}
int findKthLargest(vector<int>& nums, int k) {
quickSort(nums,0,nums.size()-1,k);
for(int i=0;i<nums.size();i++){
cout<<nums[i]<<" ";
}
return nums[nums.size()-k];
}
第k大元素 & topk
最新推荐文章于 2022-07-30 09:49:52 发布