| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【优先队列+STL】218. 天际线问题(hard)——详细思路解析 -> 正文阅读 |
|
[数据结构与算法]【优先队列+STL】218. 天际线问题(hard)——详细思路解析 |
【优先队列+STL】218. 天际线问题(hard)——详细思路解析1、题目再现城市的 天际线 是从远处观看该城市中所有建筑物形成的轮廓的外部轮廓。给你所有建筑物的位置和高度,请返回 由这些建筑物形成的 天际线 。 每个建筑物的几何信息由数组 buildings 表示,其中三元组 buildings[i] = [lefti, righti, heighti] 表示: lefti 是第 i 座建筑物左边缘的 x 坐标。 righti 是第 i 座建筑物右边缘的 x 坐标。 heighti 是第 i 座建筑物的高度。 你可以假设所有的建筑都是完美的长方形,在高度为 0 的绝对平坦的表面上。 天际线 应该表示为由 “关键点” 组成的列表,格式 [[x1,y1],[x2,y2],…] ,并按 x 坐标 进行 排序 。关键点是水平线段的左端点。列表中最后一个点是最右侧建筑物的终点,y 坐标始终为 0 ,仅用于标记天际线的终点。此外,任何两个相邻建筑物之间的地面都应被视为天际线轮廓的一部分。 注意:输出天际线中不得有连续的相同高度的水平线。例如 […[2 3], [4 5], [7 5], [11 5], [12 7]…] 是不正确的答案;三条高度为 5 的线应该在最终输出中合并为一个:[…[2 3], [4 5], [12 7], …] 示例 1: 2、思路分析笔者查阅各类型的题解,发现对该题目中的解题过程仍然还是搞不清楚,终于找到了一篇较为清晰的文章,其描述的算法浅显易懂,本文就是基于此题解做出的更近一步的分析和阐述。 参考文章:详细通俗的思路分析,多解法
以示例中的数据为例,我们得到了所有建筑的左右端点:并做了左右的标记 再次回到上图,我们发现关键点的位置存在一个共性:如果是上升的,那么关键点一定是在上升过程中的最高点(左端点);如果是下降的,关键点在下降过程中的次高点。(右端点) 从这里也能看出,需要设计一个数据结构,每次都能保存所有的高度,并且能返回所有高度中的最大值,优先队列刚好符合这种特性!!! 因此,整个算法的思路大致如下:
将该算法过程使用示例进行测试:
然后再考虑一些边界情况,开始给坐标排序的时候我们是根据 x 坐标大小,当 x 坐标相等的时候怎么办呢? 考虑两个坐标比较的时候,x 坐标相等会有三种情况。
上边的三条规则也是根据三种情况归纳总结出来的,大家可以举例子来判断。 有了这三个规则,然后写代码的话就会很繁琐,这里有个技巧。存左上角坐标的时候, 将高度(y)存为负数。存右上角坐标的时候,将高度(y)存为正数。 这么做有两个作用。 一个作用就是可以根据高度的正负数区分当前是左上角坐标还是右上角坐标。 另一个作用就是可以通过一个比较器,就实现上边的三条比较规则。 3、STL——multiset的使用虽然stl中有专门的优先队列数据结构——priority_queue,但是本题中涉及到对队列元素中按值删除操作,在该类型下无法完成!但是multiset数据结构可以实现上述功能,具体的使用方法参照下面的博客吧。 4、代码c++
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 3:22:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |