问题描述:
Find the kth largest element in an unsorted array. Note that it is the kth largest element in the sorted order, not the kth distinct element.
For example,
Given [3,2,1,5,6,4] and k = 2, return 5.
Note:
You may assume k is always valid, 1 ≤ k ≤ array’s length.
分析:这道题就是使用一个最小堆,然后使用java的priorityqueue来实现,但是优先级队列中是没有容量限制的,所以需要手工维护一个maxsize,当队列的容量达到maxsize时,取出队列头的元素,查看nums[i]的大小。
代码如下:360ms
public class Solution {
int maxSize;
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> queue = new PriorityQueue<>();
if(k<=0)
return 0;
maxSize = k;
for(int i =0;i<nums.length;i++){
if(queue.size()<maxSize)
queue.offer(nums[i]);
else{
int top = queue.peek();
if(top<nums[i]){
queue.poll();
queue.offer(nums[i]);
}
}
}
return queue.peek();
}
}