在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
说明:
你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。
代码:
class Solution {
public void adjustHeap(int[] nums, int index, int len) {
int tmp = nums[index];
for (int i = index * 2 + 1; i < len; i=i*2+1) {
if (i+1<len&&nums[i+1]>nums[i]) {
i++;
}
if (tmp < nums[i]) {
nums[index]=nums[i];
index=i;
} else {
break;
}
}
nums[index]=tmp;
}
public int findKthLargest(int[] nums, int k) {
int result = 0;
int len = nums.length;
for (int i = len / 2 - 1; i >= 0; i--) {
adjustHeap(nums, i, len);
}
int count=0;
for(int i=len-1;i>=0;i--){
count++;
if (count==k){
result=nums[0];
}
int tmp = nums[i];
nums[i]=nums[0];
nums[0]=tmp;
adjustHeap(nums,0,i);
}
return result;
}
}