105 - The Skyline Problem
来源:互联网 发布:执业药师网络课程 编辑:程序博客网 时间:2024/04/30 22:16
此题比较简单,直接扫描线法处理就可以了。先把每个楼的三元组 (left, height, right) 转化为两个事件:left 转化为进入事件,right 转化为离开事件。然后对所有的事件进行排序后从左向右进行扫描处理:
- 一个楼进入扫描线:加入到“活动楼列表”,如果其 height > currentSkylineHeight,则修改 currentSkylineHeight 为 height
- 一个楼离开扫描线:从“活动楼列表”删除之,如果其 height == currentSkylineHeight,则在“活动楼列表”中找到最高的一个,若最高的那一个的 height’ < currrentSkylineHeight,调整currentSkylineHeight 为 height’
要注意的点有几个:
- 在一个 x 坐标处可能有多个楼进入,多个楼离开。要先处理进入的,再处理离开的。这可以在排序时定好规则。
- 处理进入的楼时,要一次把所有在同一个 x 坐标处进入的楼全部扫描完,找到其中最高的高度与当前 skyline 的高度比较。一个 x 坐标处最多变化一次。
- 处理离开的楼时,也与上面一样,注意一个 x 坐标处最多变化一次
- 如果要在线提交得到AC,输出完成后必须加上个回车(我为此WA了很多次。。。)
扫描线在处理这种线段或是面积之类的问题时经常用到,多练习会对处理这类问题很有帮助。
返回 Volume I 索引
返回总索引
- 105 - The Skyline Problem
- UVA 105 - The Skyline Problem
- UVa 105 - The Skyline Problem
- UVA 105 - The Skyline Problem
- uva 105 The Skyline Problem
- Uva 105 The Skyline Problem
- UVa 105 The Skyline Problem (想法题)
- uva 105 - The Skyline Problem(暴力)
- UVA 105 - The Skyline Problem(暴力枚举)
- UVa OJ 105 - The Skyline Problem
- leetcode - The Skyline Problem
- The Skyline Problem
- The Skyline Problem
- The Skyline Problem
- LeetCode - The Skyline Problem
- leetcode:the skyline problem
- LeetCode218:The Skyline Problem
- The Skyline Problem -- leetcode
- 用AspNetPager控件最详细的分页实现方法
- Add USB WIFI to your system
- fdopen and socket
- 我对异常的理解_temp1
- 《C专家编程》之C语言的声明
- 105 - The Skyline Problem
- SQL*PLUS命令的使用大全(上)
- netbeans快捷键设置
- DevExpress控件的使用
- 存储过程中的 set ansi_nulls
- VC项目文件说明
- Content Type
- oracle中Translate()函数用法
- 解析大端模式和小端模式