leetcode(Aarray)–215 数组中的第k个最大元素
1,题目:

2,思路:
方法一:排序数组(Arrays.sort(nums))
方法二:小顶堆
小顶堆:即堆顶元素是整个堆的最小值
- 将数组中的元素加入到堆中,并保持堆中的大小<k,这样,堆中就保留了前k个最大的元素,这样呢,堆顶元素就是所需的答案
- 堆里先保存k个数,然后后面的数,比堆顶大的话,就堆顶出队,将大于堆顶的数加入,最后堆顶就是第k大的数
3,代码:
方法一:排序数组
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) {
//方法二:小顶堆:即堆顶元素是整个堆的最小值
//将数组中的元素加入到堆中,并保持堆中的大小<k,这样,堆中就保留了前k个最大的元素,这样呢,堆顶元素就是所需的答案
//堆里先保存k个数,然后后面的数,比堆顶大的话,就堆顶出队,将大于堆顶的数加入,最后堆顶就是第k大的数
PriorityQueue<Integer> heap = new PriorityQueue<Integer> ((n1, n2) -> (n2-n1));
for(int n = 0; n < nums.length; n++){
heap.add(nums[n]);
if(heap.size() > k)
heap.poll();
}
return heap.poll();
}
}
本文详细解析了LeetCode上的215题“数组中的第k个最大元素”,提供了两种解决方案:一种是通过排序数组来直接找到第k个最大元素;另一种是使用小顶堆,动态维护前k个最大元素,最终堆顶元素即为所求。小顶堆方法尤其适用于大数据集,能更高效地解决问题。


被折叠的 条评论
为什么被折叠?



