Find K-th largest element in an array.
Notice
You can swap elements in the array
Example
In array [9,3,2,4,8]
,
the 3rd largest element is 4
.
In array [1,2,3,4,5]
,
the 1st largest element is 5
, 2nd largest element is 4
,
3rd largest element is 3
and etc.
空间复杂度为O(1),时间复杂度为O(n)。使用快速排序法。
class Solution {
/*
* @param k : description of k
* @param nums : array of nums
* @return: description of return
*/
public int kthLargestElement(int k, int[] nums) {
int left = 0, right = nums.length - 1;
while(left < right) {
int l = left, r = right;
int key = nums[l];
while(l < r) {
while(l < r && nums[r] < key) r--;
nums[l] = nums[r];
while(l < r && nums[l] >= key) l++;
nums[r] = nums[l];
}
nums[l] = key;
if(l == k - 1) return nums[l];
else if(l < k - 1) left = l + 1;
else right = l - 1;
}
return nums[k - 1];
}
};