LeetCode Hot100 215.数组中的第k个最大元素
2023-12-21 18:39:42
题目:
给定整数数组?nums
?和整数?k
,请返回数组中第?k
?个最大的元素。
请注意,你需要找的是数组排序后的第?k
?个最大的元素,而不是第?k
?个不同的元素。
你必须设计并实现时间复杂度为?O(n)
?的算法解决此问题。
方法一:内部 api 排序
class Solution {
public int findKthLargest(int[] nums, int k) {
Arrays.sort(nums);
int n = nums.length;
return nums[n - k];
}
}
方法二:堆排序
class Solution {
public int findKthLargest(int[] nums, int k) {
PriorityQueue<Integer> heap = new PriorityQueue<>(); // 小顶堆
for (int num : nums) {
heap.offer(num);
if (heap.size() > k) // 让堆始终保持k个元素,多于k时让堆顶即最小的出
heap.poll(); // 出堆顶,即最小的元素
}
return heap.peek(); // 返回堆顶元素
}
}
小顶堆:每个节点的值都小于或等于其左右孩子的值
大顶堆:每个节点的值都大于或等于其左右孩子的值
文章来源:https://blog.csdn.net/qq_57349657/article/details/135135281
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!