寻找数组的第k大数:思路即为对数组进行“简易快速排序”,那么数组的(k-1)位置即为结果:每次使用快速排序后都确定一个mid值,满足在数组中mid右侧的值都比它大,左侧都比他小;若mid==(k-1),那么停止排序;若mid小于(k-1),那么继续对mid右侧进行快排;若mid大于(k-1),则对mid左侧进行快速排序。
该题目的核心还是如何利用快速排序的思想,在快速排序的基础上进行一定的优化
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
int left=0,right=nums.size()-1;
int mid;
k=nums.size()-k; //the pos of the k-th largest number
while(left<=right)
{
mid=sorted(nums,left,right);
if(mid==k)
{
// return nums[mid];
break;
}
else
{
if(mid<k)
left=mid+1;
else
right=mid-1;
}
}
return nums[mid];
}
int sorted(vector<int>& nums,int begin,int end)
{
int flag=nums[begin];
while(begin<end)
{
while(begin<end&&flag<=nums[end])
end--;
nums[begin]=nums[end];
while(begin<end&&flag>nums[begin])
begin++;
nums[end]=nums[begin];
}
nums[begin]=flag;
return begin;
}
};