218 天際線問題

2021-09-19 05:39:17 字數 961 閱讀 8196

城市的天際線是從遠處**該城市中所有建築物形成的輪廓的外部輪廓。現在,假設您獲得了城市風光**(圖a)上顯示的所有建築物的位置和高度,請編寫乙個程式以輸出由這些建築物形成的天際線(圖b)。

每個建築物的幾何資訊用三元組[li,ri,hi]表示,其中liri分別是第 i 座建築物左右邊緣的 x 座標,hi是其高度。可以保證0 ≤ li, ri ≤ int_max,0 < hi ≤ int_maxri - 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] ]

說明:

multiset pair 218 天際線問題

城市的天際線是從遠處 該城市中所有建築物形成的輪廓的外部輪廓。現在,假設您獲得了城市風光 圖a 上顯示的所有建築物的位置和高度,請編寫乙個程式以輸出由這些建築物形成的天際線 圖b 每個建築物的幾何資訊用三元組 li,ri,hi 表示,其中 li 和 ri 分別是第 i 座建築物左右邊緣的 x 座標,...

Leetcode218 天際線問題 掃瞄線

如圖,假設有一條線從左往右掃瞄陣列 1 遇到左端點,則記錄當前x座標下的最大高度 2 遇到右端點,則記錄當前x座標下的最大高度 很明顯,我們可以採用大頂堆來儲存座標為x時,當前建築的高度h x 遇到左端點則把高度入堆,當前堆頂元素即為x處最大高度 遇到右端點,則把對應建築的左端點出堆,此時堆頂同樣是...

LeetCode 218 天際線問題 掃瞄線解法

本題思路,每次遇到乙個左邊就加入陣列,遇到右邊就出陣列,每次記錄當前最大的高度,如果最大高度變化,天際線位置也要隨著改變。我沒有找到合適的資料結構去記錄這一變化,用vector每次修改的複雜度是o n 肯定會超時,後來看到網上有用到multiset,之前沒用過,其實這就是允許有重複元素的set,這樣...