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.
Note:
You may assume k is always valid, 1 ≤ k ≤ array's length
題目解析:此題運用分治算法和遞歸,首先以第一個數爲基準比較大小將向量分成兩個向量,通過k來判斷所要找的值在哪個分向量中,以此遞歸找下去。例子解析如圖。
程序答案:
class Solution {
public:
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);
}
};
另一種解法:
程序答案:
class Solution {
public:
int findKthLargest(vector<int>& nums, int k) {
int n=nums.size();
if(n==1) return nums[0];
else
{
sort(nums.begin(),nums.end());
return nums[n-k];
}
}
};