解法都在代码里,不懂就留言或者私信
class Solution {
/**这个题没看出来考啥?考堆吗?那你要熟悉堆的特性和常用的操作 */
public int findKthLargest(int[] nums, int k) {
/**如果数组只有一个数而k又大于等于1小于等于数组长度,那就只能返回第一个了*/
if(nums.length == 1) {
return nums[0];
}
/**堆默认是小顶堆(顶上最小,也称为大根堆)*/
PriorityQueue<Integer> heap = new PriorityQueue<>();
/**遍历原始入堆 */
for(int num : nums) {
/**如果堆的大小小于k,直接入堆 */
if(heap.size() < k) {
heap.offer(num);
/**如果堆的大小已经等于k了(堆满了),如果当前元素比堆顶(堆中最小的)大则把堆顶弹出,自己入堆
否则这个数直接淘汰 */
} else if(num >= heap.peek()){
heap.poll();
heap.offer(num);
}
/**else就不写了,啥也不做*/
}
/**堆里面的k个数就是最大的k个数,而顶上是它们里最小的,也就是第k大的数 */
return heap.peek();
}
}
效果一般吧,Leetcode推荐快排和堆排序,本题是堆排序