算法通关村——解析堆在数组和链表的应用

1. 堆

1.1 什么是堆?

堆是将一组数据以完全二叉树的形式存储在数组里面。一般有大根堆和小根堆。
小根堆:任意节点的值小于等于它的左右孩子,最小值在堆顶。
大根堆:任意节点的值大于等于它的左右还是,最大值在堆顶。
java里面采用PriorityQueue,然后可以自定义构建小根堆,大根堆。
在这里插入图片描述

2. 数组中的第K个最大元素

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。
请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。

2.1 小根堆

主要思路就是使用一个小根堆来存储前k个元素,然后再遍历k后面的元素,如果有元素大于队首元素,队首元素出队,该元素入队,否则继续遍历。

输入: [3,2,1,5,6,4], k = 2
输出: 5

  1. k=2,创建容量为2的小根堆,先添加3,2元素,堆元素[2,3]
  2. 1进入,1<2, 继续
  3. 5入队,5>2,2出队,5入队,堆元素[3,5]
  4. 6入队,6>3,3出队,6入队,堆元素[5,6]
  5. 4<5,继续,退出,第k个最大元素就是5
 public int findKthLargest(int[] nums, int k) {int len = nums.length;if(k>len){return -1;}// 小根堆PriorityQueue<Integer> pq = new PriorityQueue<Integer>(k,(a,b)->a-b);// 添加前k个元素for(int i=0;i<k;i++){pq.add(nums[i]);}for(int i=k;i<len;i++){// 堆顶元素Integer top = pq.peek();// 堆顶元素小,堆顶元素出栈,当前元素入栈if(nums[i] > top){pq.poll();pq.offer(nums[i]);}}return pq.peek();}

3. 合并 K 个升序链表

给你一个链表数组,每个链表都已经按升序排列。
请你将所有链表合并到一个升序链表中,返回合并后的链表。
合并K个升序链表

3.1 小根堆

构建一个小根堆,让里面的每个列表的头节点添加到堆里面,然后创建一个新的链表,将最小的元素添加到链表里面,这个最小的元素后面如果还有其他元素的话,就将其他元素添加至堆里面,进一步排序,然后再刷选出最小的节点。

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:
[
1->4->5,
1->3->4,
2->6
]
将它们合并到一个有序链表中得到。
1->1->2->3->4->4->5->6

堆里面初始:头节点 1,1,2
第一次合并到新链表,1里面还剩[1,3,4],[2,6],[4,5] 头节点1,2,4 , 链表 1 ->
第二次合并 [2,6][3,4] [4,5], 头节点2,3,4, 链表 1->1->
第三次合并 [6][3,4][4,5] 头节点3,4,5,链表 1->1->2
依次合并

public ListNode mergeKLists(ListNode[] lists) {if(lists == null){return null;}// 构建小根堆PriorityQueue<ListNode> pq = new PriorityQueue<ListNode>(Comparator.comparing(node->node.val));for(int i=0;i<lists.length;i++){if(lists[i]!=null){pq.add(lists[i]);}}ListNode sentinel = new ListNode(-1);ListNode res = sentinel;while(!pq.isEmpty()){// 合并后链表里面最小值res.next = pq.poll();res = res.next;if(res.next!=null){pq.add(res.next);}}return sentinel.next;}

真要写起来的话还是先写两个链表合并,然后再升级多个链表合并,对于堆里面的有些性质还不是太熟悉的,所以一时还是想不到这种方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620061.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

JavaSE 集合框架及背后的数据结构

目录 1 介绍2 学习的意义2.1 Java 集合框架的优点及作用2.2 笔试及面试题 3 接口 interfaces3.1 基本关系说明3.2 Collection 常用方法说明3.3 Collection 示例3.4 Map 常用方法说明3.5 Map 示例 4 实现 classes5 Java数据结构知识体系5.1 目标5.2 知识点 1 介绍 集合&#xf…

贝佐斯前妻签署捐赠誓言:承诺捐出半数财产 目前价值接近180亿美元

【TechWeb】5月28日消息&#xff0c;据国外媒体报道&#xff0c;在今年1月份宣布同贝佐斯离婚、并在4月份完成程序、公布财产分配方案后&#xff0c;麦肯齐贝佐斯也成为全球最富有的女性之一&#xff0c;资产超过了300亿美元。 而在处理完离婚程序之后还不到两个月&#xff0c;…

走着走着,就剩下了沉默

从前&#xff0c;车马很慢&#xff0c;一生只够爱一人。如今&#xff0c;万物很快&#xff0c;一生却难得一人心。 这段话看起来很伤感&#xff0c;却有几分真实。 如今的社会&#xff0c;能够深情共白首的伴侣少之又少&#xff0c;更多的是感情变质&#xff0c;互相辜负。 想…

“是不是不能找程序员做男朋友?” 来听听程序员们怎么回答!

Time will tell. 今日在吃瓜又看到了一条有意思的话题: 尽管35岁之后失业的程序员确实不少,但是这样说是不是太真实、冷血了一些… 毕竟,我以为,两个人是既然会在一起,那应该就是想要一起过一辈子的!而大部分人在一起也都是因为相互喜欢吧! 所以咱们都这么现实的吗?这…

Cesium 显示经纬高

文章目录 需求分析 需求 页面展示经、纬度和高 分析 html <div id"latlng_show" style"width:340px;height:30px;position:absolute;bottom:40px;right:200px;z-index:1;font-size:15px;"><div style"width:100px;height:30px;float:left;…

性能测试面试问题,一周拿3个offer不嫌多

性能测试的三个核心原理是什么&#xff1f; 1.基于协议。性能测试的对象是网络分布式架构的软件&#xff0c;而网络分布式架构的核心是网络协议 2.多线程。人的大脑是单线程的&#xff0c;电脑的cpu是多线程的。性能测试就是利用多线程的技术模拟多用户去负载 3.模拟真实场景。…

检测链表中是否存在环

题目、解析和代码 题目&#xff1a;给定一个单链表&#xff0c;判断其中是否有环的存在 解析&#xff1a;这里使用两个遍历速度不一样的结点进行判断&#xff0c;一个慢结点从首结点开始遍历&#xff0c;这个结点每次只遍历一个结点&#xff1b;一个快结点从第二个结点进行遍历…

连接器信号完整性仿真教程 七

本将介绍微带线及差分微带线仿真。做连接器信号完整性仿真时&#xff0c;有时后没法将激励端口直接设置到连接器端子上&#xff0c;这就需画出连接器PCB PAD&#xff0c;将激励端口设置在PAD的端面上&#xff0c;或者用引线连接PAD&#xff0c;将引线引出到适当的位置&#xff…

登录校验-Filter-登录校验过滤器

目录 思路 登录校验Filter-流程 步骤 流程图 登录校验Filter-代码 过滤器类 工具类 测试登录 登录接口功能请求 其他接口功能请求 前后端联调 思路 前端访问登录接口&#xff0c;登陆成功后&#xff0c;服务端会生成一个JWT令牌&#xff0c;并返回给前端&#xff0…

谷歌相册明年取消无限空间储存政策

简单介绍 据可靠消息称谷歌相册将从明年夏季也就是 2021年6月1日 开始取消无限存储容量政策。从明年夏季开始继续上传照片和视频将占用谷歌分配给用户的15 GB免费空间。 原文转载自浅行浅醉博客 原文阅读&#xff1a;点击阅读

黑客盯上了Google相册漏洞

2019独角兽企业重金招聘Python工程师标准>>> 研究人员在Google相册应用上发现了一个已修复的漏洞。有了这个漏洞&#xff0c;黑客可以使用Google相册来跟踪他们的位置历史记录。 来自互联网安全公司Imperva的Ron Masas在博客文章中解释说&#xff0c;Google相册最近…

笔记本电脑与台式机同步连接_如何将台式机与Google云端硬盘(和Google相册)同步...

笔记本电脑与台式机同步连接 Google has been doing its part to make sure everyone has a backup of important data, and it recently released a new tool for Windows and Mac users to take that redundancy to the next level. Appropriately named Backup and Sync, it…

vue查看本地相册_使用Vue.js构建的Google相册相册查看器

vue查看本地相册 google-photos-vue (google-photos-vue) Google Photos album viewer built with Vue.js. 使用Vue.js构建的Google相册相册查看器。 特征 (Features) 格式 (Formats) 照片 (Photo) Conventional grid. 常规网格。 文本 (Text) Justified layout highlighting…

复古拼贴_如何在Android上使用Google相册创建拼贴,动画或电影

复古拼贴 Google Photos is a huge improvement over Android’s old “Gallery” app, but it does a lot more than just keep your stuff organized and synced. You can easily manipulate your photos into some very cool, shareable collages, animations, and even mov…

多亏了Google相册,如何一键释放Android手机上的空间

Let’s be real here: modern smartphones have limited storage. While they’re coming with a lot more than they used to, it’s easy to fill 32GB without even realizing it. And with today’s high-end cameras, well, pictures and videos can quickly consume a bi…

如何在Android的相机应用程序中添加Google相册快捷方式

Google Photos is arguably the best photo management app on the Play Store. It’s intuitive and easy to use, has lots of useful features, and best of all, it backs up all of your images. The thing is, if you’re using a non-stock Android phone—like an LG G…

谷歌相册也不能无限白嫖了,「地主家」也烧不起免费网盘

木易 发自 凹非寺 量子位 报道 | 公众号 QbitAI 连Google都撑不住了。 Google相册宣布&#xff1a;从2021年6月1日开始&#xff0c;将停止提供免费的无限制存储空间。 这意思&#xff0c;是不让「白嫖」了&#xff1f; 不不不&#xff0c;只是不能无限白嫖了。 Google相册还是会…

android仿漫画源码、抽奖转盘、Google相册、动画源码等

Android精选源码 android实现仿今日头条的开源项目 波浪效果&#xff0c;实现流量的动态显示 美妆领域的app, 集成了摄像头取色, 朋友圈, 滤镜等 android仿漫画源码 android一个视差动画的引导页效果 Android 仿美团app头部左右切换效果 android银行卡操作步骤 Android自定义Vi…

谷歌云端硬盘 转存_如何合并多个Google云端硬盘和Google相册帐户

谷歌云端硬盘 转存 It isn’t possible to merge Google accounts directly, making it tricky to move your data from A to B. If you want to merge data across multiple Google Drive and Google Photos accounts, here’s how you do it. 无法直接合并Google帐户&#xf…

如何防止某些照片显示在Android的图库或Google相册中

Look, we get it: you don’t want every picture showing up in your gallery app on your Android phone. The thing is, there’s not an easy way to just let Gallery or Google Photos know you want to keep certain photos (or even folders) private. But there is a …