#数组中的第K个最大元素
在未排序的数组中找到第 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
class Solution {
public int findKthLargest(int[] nums, int k) {
int n=nums.length;
//创建k个小顶堆
for(int i=k/2;i>=0;i-=1){
heap(nums,k,i);
}
//依次检查k+1~n是否大于堆顶
for(int i=k;i<n;i++){
if(nums[0]<nums[i]){
swap(nums,0,i);
heap(nums,k,0);
}
}
return nums[0];
}
public void swap(int[] a,int i,int j){
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
public void heap(int[] a,int n,int k){
int left=2*k+1;
int right=2*k+2;
int large=k;
if(left<n && a[left]<a[large]){
large=left;
}
if(right<n && a[right]<a[large]){
large=right;
}
if(large!=k){
swap(a,large,k);
heap(a,n,large);
}
}
}