题目描述:
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4]
and k = 2, return 5.
我们需要找到一个数组里第k大的数。首先可以想到对数组进行排序,这样时间复杂度为O(nlogn),要对该算法进行优化,采用类似快排的算法,首先选取一基准数,将数组分为两部分,一部分大于该数,一部分小于该数,再判断第k大数在哪一部分,对该部分递归地划分。代码如下:
int findKthLargest(vector<int>& nums, int k)
{
int length = nums.size();
if (length == 1)
return nums[0];
vector<int> left;
vector<int> right;
for (int index=1; index<length; index++)
{
if (nums[index] > nums[0])
right.push_back(nums[index]);
else
left.push_back(nums[index]);
}
length = right.size();
if (length >=k)
return findKthLargest(right, k);
else if(length == k-1)
return nums[0];
else
return findKthLargest(left, k-length-1);
}