这道题目是分治算法中的一道题目,中等难度里面通过率为37%的一道求数组当中最大元素的一道题目。
题目大意:
给定一个数组,然后给定我们一个数字代表第几大的数,比如这个数字为1,那么就是从这个数组当中挑选出第一大的数字。
例子:
For example,
Given [3,2,1,5,6,4]
and k = 2, return 5.
算法:
这道题目其实比较简单,也有很多做法,用sort函数直接排序是可以的,复杂度为O(nlogn)。但是想到这道题目是分治算法的,所以为了练习,还是用快速排序做。做完之后,再根据给定的排名进行直接寻找就可以了。
代码:
class Solution
{
public:
int findKthLargest(vector<int>& nums, int k)
{
qsortt(nums,0,nums.size()-1);
int n=nums.size()-1;
return nums[n-k+1];
}
void qsortt(vector<int>& nums,int left,int right)
{
if(left>right) return;
int temp;
temp=nums[left];
int i,j;
i=left;
j=right;
while(i!=j)
{
while(nums[j]>=temp&&i<j) j--;
while(nums[i]<=temp&&i<j) i++;
if(i<j)
{
int t;
t=nums[i];
nums[i]=nums[j];
nums[j]=t;
}
}
nums[left]=nums[i];
nums[i]=temp;
qsortt(nums,left,i-1);
qsortt(nums,i+1,right);
}
};