LeetCode 218. 天际线问题(multiset优先队列)*
文章目錄
- 1. 題目
- 2. 解題
1. 題目
城市的天際線是從遠處觀看該城市中所有建筑物形成的輪廓的外部輪廓。
現在,假設您獲得了城市風光照片(圖A)上顯示的所有建筑物的位置和高度,請編寫一個程序以輸出由這些建筑物形成的天際線(圖B)。
每個建筑物的幾何信息用三元組 [Li,Ri,Hi] 表示,其中 Li 和 Ri 分別是第 i 座建筑物左右邊緣的 x 坐標,Hi 是其高度。
可以保證 0 ≤ Li, Ri ≤ INT_MAX, 0 < Hi ≤ INT_MAX 和 Ri - Li > 0。
您可以假設所有建筑物都是在絕對平坦且高度為 0 的表面上的完美矩形。
例如,圖A中所有建筑物的尺寸記錄為:[ [2 9 10], [3 7 15], [5 12 12], [15 20 10], [19 24 8] ] 。
輸出是以 [ [x1,y1], [x2, y2], [x3, y3], ... ] 格式的“關鍵點”(圖B中的紅點)的列表,它們唯一地定義了天際線。
關鍵點是水平線段的左端點。請注意,最右側建筑物的最后一個關鍵點僅用于標記天際線的終點,并始終為零高度。
此外,任何兩個相鄰建筑物之間的地面都應被視為天際線輪廓的一部分。
例如,圖B中的天際線應該表示為:[ [2 10], [3 15], [7 12], [12 0], [15 10], [20 8], [24, 0] ]。
說明:
任何輸入列表中的建筑物數量保證在 [0, 10000] 范圍內。
輸入列表已經按左 x 坐標 Li 進行升序排列。
輸出列表必須按 x 位排序。
輸出天際線中不得有連續的相同高度的水平線。
例如 […[2 3], [4 5], [7 5], [11 5], [12 7]…] 是不正確的答案;
三條高度為 5 的線應該在最終輸出中合并為一個:[…[2 3], [4 5], [12 7], …]
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/the-skyline-problem
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
- 參考題解區Allen大佬
- 把建筑物左右頂點分開計算,左頂點高度用負數區分
- 把所有頂點插入multiset,開辟另一個高度h的multiset,含初始元素 0
- 遍歷所有的頂點,是左頂點則插入該點的 hi,右頂點從 h 中刪除 hi
- 讀取最大的hi,如果跟上次的不一樣,視為拐點,寫入答案
128 ms 16.4 MB
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結
以上是生活随笔為你收集整理的LeetCode 218. 天际线问题(multiset优先队列)*的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 388. 文件的最长绝
- 下一篇: LeetCode 929. 独特的电子邮