218. The Skyline Problem

网友投稿 774 2022-10-09

218. The Skyline Problem

218. The Skyline Problem

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).

Buildings Skyline Contour

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_MAX, 0 < 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], …]

solution:

we need go through each rectangle, the output should be left most and high most point. so we need a way to keep the current highest values and if finish this rect we need remove the point. max heap, can achieve this. Also we need another list to track all points from left high to right short.

class Solution { public List getSkyline(int[][] buildings) { List res = new ArrayList(); List points = new ArrayList<>(); for(int i=0; i() { @Override public int compare(int[] o1, int[] o2) { if(o1[0] != o2[0]) return o1[0] - o2[0]; else return o2[1] - o1[1]; } }); PriorityQueue maxheap = new PriorityQueue<>(11, new Comparator() { @Override public int compare(Integer o1, Integer o2) { return o2 - o1; } }); int cur = 0, pre = 0; for(int i=0;i0) { maxheap.add(b[1]); cur = maxheap.peek(); }else { maxheap.remove(-b[1]); cur = maxheap.peek() == null ? 0:maxheap.peek(); } if(cur != pre) { res.add(new int[]{b[0], cur}); pre = cur; } } return

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:wxapp-微信小程序组件(微信小程序开发wxml)
下一篇:329. Longest Increasing Path in a Matrix
相关文章

 发表评论

暂时没有评论,来抢沙发吧~