Leetcode刷题100天—215. 数组中的第K个最大元素(优先队列)—day15
Posted 神的孩子都在歌唱
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode刷题100天—215. 数组中的第K个最大元素(优先队列)—day15相关的知识,希望对你有一定的参考价值。
前言:
作者:神的孩子在歌唱
大家好,我叫运智
给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
示例 1:
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
示例 2:
输入: [3,2,3,1,2,4,5,5,6] 和 k = 4
输出: 4
提示:
- 1 <= k <= nums.length <= 104
- -104 <= nums[i] <= 104
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/kth-largest-element-in-an-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
package 优先队列;
import java.util.PriorityQueue;
/*
* 1
* https://leetcode-cn.com/problems/kth-largest-element-in-an-array/
*这个题目和容易让很混淆,他要求是找出第k个最大数,而不是在k个数里面找出最大数
*/
public class _215_数组中的第K个最大元素 {
public static int findKthLargest(int[] nums, int k) {
// 设置优先队列
PriorityQueue<Integer> queue=new PriorityQueue<>();
// 将前k个数入队
for(int i=0;i<k;i++) {
queue.add(nums[i]);
}
// 通过后面数比较大小是否满足替换栈顶的要求
for (int i = k; i < nums.length; i++) {
// 只要当前遍历的元素比堆顶元素大,堆顶弹出,遍历的元素进去
if (nums[i]>queue.peek()) {
// 出队:由于这是优先队列,所以弹出来的肯定是最小的那个数
queue.poll();
// 入队
queue.offer(nums[i]);
}
}
// 返回堆顶元素就是第k个最大的数
return queue.peek();
}
public static void main(String args[]) {
int nums[]=new int[6];
nums[0]=5;
nums[1]=2;
nums[2]=1;
nums[3]=3;
nums[4]=6;
nums[5]=4;
int k=2;
int c=findKthLargest(nums, k);
System.out.print(c);
}
}
本人csdn博客:https://blog.csdn.net/weixin_46654114
转载说明:跟我说明,务必注明来源,附带本人博客连接。
以上是关于Leetcode刷题100天—215. 数组中的第K个最大元素(优先队列)—day15的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode刷题100天—5855. 找出数组中的第 K 大整数(优先队列)—day22
Leetcode刷题100天—387. 字符串中的第一个唯一字符(字符串)—day27
Leetcode刷题100天—387. 字符串中的第一个唯一字符(字符串)—day27
Leetcode刷题100天—2022. 将一维数组转变成二维数组(数组)—day55