您的位置:首页 > 其它

[LintCode] 第K大元素 Kth Largest Element

2016-04-26 15:57 357 查看
在数组中找到第k大的元素。

样例

给出数组 [9,3,2,4,8],第三大的元素是 4

给出数组 [1,2,3,4,5],第一大的元素是 5,第二大的元素是 4,第三大的元素是 3,以此类推

挑战

要求时间复杂度为O(n),空间复杂度为O(1)

Find K-th largest element in an 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.

Challenge

O(n) time, O(1) extra memory.

时间复杂度O(nlogn)?

class Solution {
/*
* @param k : description of k
* @param nums : array of nums
* @return: description of return
*/
public int kthLargestElement(int k, int[] nums) {
if(null == nums ||k <= 0 || nums.length < k) return Integer.MIN_VALUE;
kthMax(nums, 0, nums.length-1, k);
return nums[k-1];
}
public void kthMax(int[] nums, int left, int right, int k) {
int mid = partition(nums, left, right);
if(mid == k-1) return;
if(mid > k-1)
kthMax(nums, left, mid-1, k);
else
kthMax(nums, mid+1, right, k);
}
public int partition(int[] nums, int left, int right) {
int temp = nums[left];
while(left < right) {
while(left < right && nums[right] <= temp)
right--;
nums[left] = nums[right];
while(left < right && nums[left] > temp)
left++;
nums[right] = nums[left];
}
nums[left] = temp;
return left;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: