优先队列的细节

简介: 优先队列的细节

优先队列的细节

 

 

package 队列.优先级队列;
import java.util.Comparator;
import java.util.PriorityQueue;
/**
 * 注意到 第几大或者前几大-----使用的数据结构是最小堆【优先队列】
 * 逻辑:【方法2、方法3差不多吧】
 * 
 * @author Huangyujun
 *
 *
 *题目:举例:215_数组中的第K个最大元素
 */
public class 优先队列的细节 {
    //方法一:优先队列【方式2的效率高】
    public int findKthLargest2(int[] nums, int k) {
        //小根堆
        PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>();//默认比较器就是升序的【小根堆】
        //逻辑:先存储进去 k容量数据【小根堆】,跟堆顶比【堆顶太小了,抛弃,【调整一个新的最小值于堆顶】,当前值进入维持容量k】
        //每次都抛弃掉最小的【堆顶】,更换进入大的,剩下的就是大的数据呀
        int len = nums.length;
        for(int i = 0; i < len; i++) {
            if(pQueue.size() < k) {
                pQueue.add(nums[i]);
            }else {
                if(pQueue.peek() < nums[i]){
                    pQueue.remove();
                    pQueue.add(nums[i]);
                }
            }
        }
        return pQueue.peek();
    }
    //方法二:
    class Solution {
        public int findKthLargest(int[] nums, int k) {
            PriorityQueue<Integer> heap = new PriorityQueue<>();////小根堆【默认比较器就是升序的,小根堆】
            //要找第k 大【不断地维持住一个小根堆的数据】:容量达到k时:
            //(1)当前值比较小,【可能会被调整到堆顶】,容量达标,被poll掉
            //(2)当前值比较大,【存储到后边】,容量达标,被poll掉的是当前最小的那个
            //整个逻辑在于不断地维持住一个小根堆【每次都弹出掉最小的】~~~剩下的便是最大的数据了
            for (int num : nums) {
                heap.add(num);
                if (heap.size() > k) {
                    heap.poll();
                }
            }
            return heap.peek();
        }
    }
}
目录
相关文章
|
8月前
|
Java Perl
我画了近百张图来理解红黑树
我画了近百张图来理解红黑树
68 2
【栈和队列面试题】用栈实现队列(动图解析更清晰)
【栈和队列面试题】用栈实现队列(动图解析更清晰)
|
7月前
|
算法 C语言
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)二
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)二
45 2
|
7月前
|
存储 算法
数据结构和算法学习记录——设计循环队列(数组实现循环队列)核心思路、题解过程、完整题解
数据结构和算法学习记录——设计循环队列(数组实现循环队列)核心思路、题解过程、完整题解
55 1
|
7月前
|
算法 C语言
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)一
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)一
44 0
|
存储 算法
【数据结构初阶】第七篇——二叉树的顺序结构及实现(堆的向下,向上调整算法)
【数据结构初阶】第七篇——二叉树的顺序结构及实现(堆的向下,向上调整算法)
【数据结构初阶】第七篇——二叉树的顺序结构及实现(堆的向下,向上调整算法)
|
算法 搜索推荐 C++
数据结构:谈快速排序的多种优化和非递归展开,以及排序思想归纳
数据结构:谈快速排序的多种优化和非递归展开,以及排序思想归纳
|
存储 算法 C++
【C++:STL之栈和队列 | 模拟实现 | 优先级队列 】(二)
【C++:STL之栈和队列 | 模拟实现 | 优先级队列 】(二)
108 0
|
存储 编译器 C语言
【C++:STL之栈和队列 | 模拟实现 | 优先级队列 】(一)
【C++:STL之栈和队列 | 模拟实现 | 优先级队列 】(一)
93 0
|
存储 缓存 调度
一文读懂循环队列的实现细节
一文读懂循环队列的实现细节
572 0