在未排序的數組中找到第 k 個最大的元素。請注意,你須要找的是數組排序後的第 k 個最大的元素,而不是第 k 個不一樣的元素。數組
示例 1:spa
輸入: [3,2,1,5,6,4] 和 k = 2
輸出: 5
複製代碼
示例 2:code
輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4
輸出: 4
複製代碼
說明:排序
你能夠假設 k 老是有效的,且 1 ≤ k ≤ 數組的長度。it
class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue< Integer > minHeap = new PriorityQueue< Integer >( k );
for( int num : nums ){
if( minHeap.size() < k ){
minHeap.offer( num );
continue;
}
if( minHeap.peek() < num ){
minHeap.poll();
minHeap.offer( num );
}
}
return minHeap.peek();
}
}
複製代碼
解題思路: 創建一個大小爲k的最小堆 , 若是堆元素小於k,則往裏面放元素 , 不然查看堆頂元素, 若是堆頂元素比當前元素小, 則poll出堆頂元素,而後往堆中放入當前元素 ,最後返回堆頂元素。io