大佬教程收集整理的这篇文章主要介绍了优先队列的细节,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
优先队列的细节
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(); } } }
以上是大佬教程为你收集整理的优先队列的细节全部内容,希望文章能够帮你解决优先队列的细节所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。