博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
218. The Skyline Problem
阅读量:5027 次
发布时间:2019-06-12

本文共 2980 字,大约阅读时间需要 9 分钟。

A city's skyline is the outer contour of the silhouette formed by all the buildings in that city when viewed from a distance. Now suppose you are given the locations and height of all the buildings as shown on a cityscape photo (Figure A), write a program to output the skyline formed by these buildings collectively (Figure B).

The geometric information of each building is represented by a triplet of integers [Li, Ri, Hi], where Li and Ri are the x coordinates of the left and right edge of the ith building, respectively, and Hi is its height. It is guaranteed that 0 ≤ Li, Ri ≤ INT_MAX0 < Hi ≤ INT_MAX, and Ri - Li > 0. You may assume all buildings are perfect rectangles grounded on an absolutely flat surface at height 0.

For instance, the dimensions of all buildings in Figure A are recorded as: [ [2 9 10], [3 7 15], [5 12 12], [15 20 10], [19 24 8] ] .

The output is a list of "key points" (red dots in Figure B) in the format of [ [x1,y1], [x2, y2], [x3, y3], ... ] that uniquely defines a skyline. A key point is the left endpoint of a horizontal line segment. Note that the last key point, where the rightmost building ends, is merely used to mark the termination of the skyline, and always has zero height. Also, the ground in between any two adjacent buildings should be considered part of the skyline contour.

For instance, the skyline in Figure B should be represented as:[ [2 10], [3 15], [7 12], [12 0], [15 10], [20 8], [24, 0] ].

Notes:

  • The number of buildings in any input list is guaranteed to be in the range [0, 10000].
  • The input list is already sorted in ascending order by the left x position Li.
  • The output list must be sorted by the x position.
  • There must be no consecutive horizontal lines of equal height in the output skyline. For instance, [...[2 3], [4 5], [7 5], [11 5], [12 7]...] is not acceptable; the three lines of height 5 should be merged into one in the final output as such: [...[2 3], [4 5], [12 7], ...]
 

Approach #1: C++. [multiset]

class Solution {public:    vector
> getSkyline(vector
>& buildings) { typedef pair
Event; vector
es; hs_.clear(); for (const auto& b : buildings) { es.emplace_back(b[0], b[2]); es.emplace_back(b[1], -b[2]); } sort(es.begin(), es.end(), [](const Event& e1, const Event& e2){ if (e1.first == e2.first) return e1.second > e2.second; return e1.first < e2.first; }); vector
> ans; for (const auto& e : es) { int x = e.first; bool entering = e.second > 0; int h = abs(e.second); if (entering) { if (h > this->maxHeight()) ans.emplace_back(x, h); hs_.insert(h); } else { hs_.erase(hs_.equal_range(h).first); if (h > this->maxHeight()) ans.emplace_back(x, this->maxHeight()); } } return ans; } private: int maxHeight() const { if (hs_.empty()) return 0; return *hs_.rbegin(); } multiset
hs_;};

  

 

转载于:https://www.cnblogs.com/ruruozhenhao/p/10140587.html

你可能感兴趣的文章
Python3.6.0安装
查看>>
hdu1049
查看>>
H5项目常见问题及注意事项
查看>>
索尼(SONY) SVE1512S7C 把WIN8降成WIN7图文教程
查看>>
时间模块 && time datetime
查看>>
jquery自动生成二维码
查看>>
spring回滚数据
查看>>
新浪分享API应用的开发
查看>>
美国专利
查看>>
【JavaScript】Write和Writeln的区别
查看>>
用jquery的ajax方法获取不到return返回值
查看>>
kettle An error occurred, processing will be stopped: 错误 解决方法
查看>>
Cassandra搭建过程
查看>>
Linux下查看占用CPU与内存最高的进程
查看>>
百度编辑器图片在线流量返回url改动
查看>>
我对你的期望有点过了
查看>>
微信小程序wx:key以及wx:key=" *this"详解:
查看>>
下拉框比较符
查看>>
2.2.5 因子的使用
查看>>
css选择器
查看>>