5. 第k大元素
在数组中找到第 k 大的元素。
样例
样例 1:
输入:
n = 1, nums = [1,3,4,2]
输出:
4
样例 2:
输入:
n = 3, nums = [9,3,2,4,8]
输出:
4
挑战
要求时间复杂度为O(n),空间复杂度为O(1)。
注意事项
你可以交换数组中的元素的位置
思路:采用快速排序得到元素下标,一直到取到元素
public class Solution {
/**
* @param n: An integer
* @param nums: An array
* @return: the Kth largest element
*/
public int kthLargestElement(int n, int[] nums) {
// write your code here
return midian(nums,0,nums.length-1,nums.length-n);
}
public int midian(int[] a,int left,int right,int target) {
// write your code here
if(left < right) {
int i = left;
int j = right;
int x = a[left];
while(i < j ) {
while(i < j && a[j] >= x)
j--;
if(i<j) {
a[i]=a[j];
i++;
}
while(i < j && a[i] <= x)
i++;
if(i<j) {
a[j]=a[i];
j--;
}
}
a[i] = x;
/**在每次定位好基准数之后,比较下标*/
if(i == target)
return a[i];
if(i > target) {
return midian(a,left,i-1,target);
}
if(i<target) {
return midian(a,i+1,right,target);
}
}
return a[left];
}
}