当前位置: 首页 > news >正文

高企达建设公司网站现代著名设计师及作品

高企达建设公司网站,现代著名设计师及作品,网站商城建设基本流程,网站建设织梦源码优先队列 优先队列(Priority Queue):一种特殊的队列。在优先队列中,元素被赋予优先级,当访问队列元素时,具有最高优先级的元素最先删除 普通队列详解Leetcode 队列详解 优先队列与普通队列最大的不同点在于…

优先队列

优先队列(Priority Queue):一种特殊的队列。在优先队列中,元素被赋予优先级,当访问队列元素时,具有最高优先级的元素最先删除

普通队列详解Leetcode 队列详解

优先队列与普通队列最大的不同点在于出队顺序

  • 普通队列的出队顺序跟入队顺序相关,符合「先进先出(First in, First out)」的规则。
  • 优先队列的出队顺序跟入队顺序无关,优先队列是按照元素的优先级来决定出队顺序的。优先级高的元素优先出队,优先级低的元素后出队。优先队列符合 「最高级先出(First in, Largest out)」 的规则

适用场景

优先队列的应用场景非常多,比如:

  • 数据压缩:赫夫曼编码算法
  • 最短路径算法:Dijkstra 算法
  • 最小生成树算法:Prim 算法
  • 任务调度器:根据优先级执行系统任务
  • 事件驱动仿真:顾客排队算法
  • 排序问题:查找第 k 个最小元素

很多语言都提供了优先级队列的实现。比如,Java 的PriorityQueue,C++ 的priority_queue

Leetcode 真题

数组中的第K个最大元素

解题思路: 典型的优先队列/最大堆,依次入队排序后取队头的第K大的元素

public int findKthLargest(int[] nums, int k) {PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {return o1 - o2;}});for (int num : nums) {if (queue.size() == k) {if (queue.peek() < num) {queue.poll();queue.offer(num);}} else {queue.offer(num);}}return queue.poll();
}

前 K 个高频元素

解题思路:使用优先队列记录出现次数topK
int[] 的第一个元素代表数组的值,第二个元素代表了该值出现的次数

public int[] topKFrequent(int[] nums, int k) {Map<Integer, Integer> occurrences = new HashMap<Integer, Integer>();for (int num : nums) {occurrences.put(num, occurrences.getOrDefault(num, 0) + 1);}// int[] 的第一个元素代表数组的值,第二个元素代表了该值出现的次数PriorityQueue<int[]> queue = new PriorityQueue<int[]>(new Comparator<int[]>() {public int compare(int[] m, int[] n) {return m[1] < n[1] ? -1 : 1;}});for (Map.Entry<Integer, Integer> entry : occurrences.entrySet()) {int num = entry.getKey(), count = entry.getValue();if (queue.size() == k) {if (queue.peek()[1] < count) {queue.poll();queue.offer(new int[]{num, count});}} else {queue.offer(new int[]{num, count});}}int[] ret = new int[k];for (int i = 0; i < k; ++i) {ret[k - i - 1] = queue.poll()[0];}return ret;
}

滑动窗口最大值

解题思路:使用优先队列记录窗口范围内的topK大数
int[] 的第一个元素代表数组的值,第二个元素代表了该值的下标
根据数组元素从大到小进行排序,若是元素相同的话,则根据下标进行从大到小进行排序

public int[] maxSlidingWindow(int[] nums, int k) {int[] result = new int[nums.length - k + 1];PriorityQueue<int[]> queue = new PriorityQueue<>(new Comparator<int[]>() {@Overridepublic int compare(int[] o1, int[] o2) {return o1[0] == o2[0] ? o2[1] - o1[1] : o2[0] - o1[0];}});for (int i = 0; i < k - 1; i++) {queue.offer(new int[]{nums[i], i});}for (int i = k - 1; i < nums.length; i++) {queue.offer(new int[]{nums[i], i});// 若是优先队列/最大堆的堆顶元素 不在滑动窗口范围内,则直接从优先队列中进行删除while(queue.peek()[1] <= i - k){queue.poll();}result[i - k + 1] = queue.peek()[0];}return result;
}

参考资料:

  1. 优先队列知识
  2. Leetcode 队列详解
http://www.yayakq.cn/news/138164/

相关文章:

  • 网站如何做二级栏目网站编辑岗位
  • 青岛建站合作扬州专业外贸网站建设推广
  • 网站建设无锡海之睿网站导航的作用
  • 会网站建设怎样赚钱淮北人论坛招聘信息
  • 做标签网站是什么怎么用代码创建网站教程
  • 网站开发分销系统可以做旅行计划的网站
  • 做算法题的 网站广州网站开发哪家专业
  • 网站设置反爬虫的常用方法有哪些网站建设seo推广
  • 全国注册信息查询系统重庆seo扣费
  • 临沂网站优化哪家好wordpress批量alt代码
  • frontpage做视频网站网站页面框架设计影响用户
  • 企业网站后台管理北京专业网站建设网站推广
  • 网站代备案徐州万网网站建设
  • 公司网站建设方案模板信息部网站建设工作计划
  • 改版网站收费绍兴网站建设专业的公司4000-262-
  • 上海网站建设 分类广告稿定设计网站官网入口
  • 做php网站开发能赚钱吗免费主题软件app
  • 安徽美丽乡村建设网站住房和城乡建设部网站科技项目
  • 织梦做的网站总是被攻击交互设计个人网站
  • 做网站需要哪个系统虚拟机wordpress教程视频教程
  • 一屏式网站有什么好处ui设计手机界面
  • 厦门模版网站池州城乡住房建设厅网站
  • 网站空间的分类wordpress第三方登录教程
  • 开发网站的工具有哪些专业的网站建设联系方式
  • 营销类网站源码哥网站的模板
  • 三亚网站开发哪家好新冠疫苗接种最新消息
  • 公司网站开发合同 华律网哪里有放网站的免费空间
  • 地方网站做的好的企业免费网站建设哪个品牌好
  • 江苏常州武进区建设局网站汽车网站模板下载
  • 厦门网站设计培训公司宝山区建设用地事务所网站