class Solution {
public:
/**
* @param n: An integer
* @param nums: An array
* @return: the Kth largest element
*/
void search(int left, int right, vector<int>&nums,int n)
{
int temp = nums[left];
int 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 = nums[j]; nums[j] = nums[i]; nums[i] = t; }
}
nums[left] = nums[i];
nums[i] = temp;
if (right - i == n - 1)
{
return;
}
else if (right - (i-1) >n)
{
search(i + 1, right,nums,n);
}
else
{
search(left, i - 1, nums, n - (right - (i - 1)));
}
}
int kthLargestElement(int n, vector<int> &nums) {
// write your code here
search(0, nums.size() - 1,nums, n);
return nums[nums.size() - n];
}
};
通過80%,超時了,肯定有更優的解法。