题目描述:
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(1<=K<=n),请返回第K大的数(包括重复的元素,不用去重),保证答案存在。
解题分析:
借鉴快排思路,主要是可以判断中轴与K的关系,以此来判断是否是第K大数,或者中轴大于K时就没必要将右边的数进行快排了,节省复杂度。
class Solution {
public:
int findKth(vector<int> a, int n, int K) {
// write code here
if(n<K || n<=0)
return 0;
fastSort(a, 0, n-1,K);
return a[K-1];
}
void fastSort(vector<int>& nums, int begin, int end, int K){
if(begin>end)
return;
int left=begin;
int right=end;
int key=nums[left];
while(left<right){
while(left<right && nums[right]<key)
right--;
nums[left]=nums[right];
while(left<right && nums[left]>=key)
left++;
nums[right]=nums[left];
}
nums[left]=key;
if(left==K-1){
return;
}
else if(left>K-1){
fastSort(nums,begin,left-1,K);
}
else{
fastSort(nums,begin,left-1,K);
fastSort(nums,left+1,end,K);
}
return;
}
};
该博客介绍了一种利用快速排序的思路解决寻找整数数组中第K大元素的方法。通过实现一个名为`findKth`的函数,结合辅助的`fastSort`函数,可以在数组中有效地找到第K大的数。在`fastSort`函数中,通过中轴值与K的关系来决定排序的边界,从而避免不必要的排序操作,提高了效率。
228

被折叠的 条评论
为什么被折叠?



