参考链接:Leetcode 题解 - 排序 | CS-Notes
215. 数组中的第K个最大元素
给定整数数组 nums
和整数 k
,请返回数组中第 k
个最大的元素。
请注意,你需要找的是数组排序后的第 k
个最大的元素,而不是第 k
个不同的元素。
本题我使用了两种方法解答,分别为Java自带的排序功能和堆排序。
class Solution {
public int findKthLargest(int[] nums, int k) {
Arrays.sort(nums);
return nums[nums.length-k];
}
}
class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> heap = new PriorityQueue<>();
for(int tmp:nums){
heap.add(tmp);
}
while(heap.size()>k) heap.poll();//取走小的元素,剩下是第K大的以及更大的
return heap.peek();//更小的都走了,现在最小的就是 第K个最大的元素了
}
}
本题需要注意的问题:
1. Arrays.sort()默认的是升序排序,降序排序可采用Collection.sort()匿名内部类。
2. PriorityQueue默认是小顶堆,降序排列需使用自定义比较器。
优先队列基本操作如下:
peek()//返回队首元素
poll()//返回队首元素,队首元素出队列
add()//添加元素
size()//返回队列元素个数
isEmpty()//判断队列是否为空,为空返回true,不空返回false