multiset pair 218 天際線問題

2021-10-06 16:30:16 字數 1837 閱讀 4009

城市的天際線是從遠處**該城市中所有建築物形成的輪廓的外部輪廓。現在,假設您獲得了城市風光**(圖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], …]

掃瞄線法

用multiset的堆排序性質,可以得到儲存高度中的最大高度;

遇到新方塊左端時加入其高度,遇到方塊右側時,刪除該高度;

(1)vector> height 用於儲存左右端點,為便於區分,左端點儲存為負數;

(2)遍歷building,把左右端點儲存在height中,根據x軸排序height陣列;

(3)遍歷height,

遇到高度為負的即為左端點,該高度加入m,此時得到m中的最大高度cur,若cur!=pre,說明高度發生變化,將該高度與左邊儲存至res;

遇到高度為正的即為右端點,此時刪除該高度(multiset.erase若傳入迭代器,則只刪除該位置,而find函式返回指向該數的迭代器,可實現只刪除乙個的操作),再獲得當前的最大高度,若高度與前乙個不同,則儲存至res;

注意點

(1)m需事先加入0,以獲得高度為0的點;

(2)multiset的刪除要用find找到迭代器,不然會全部刪掉;

(3)multiset的尾部rbegin()為最大值。

class

solution);

height.

push_back()

;}sort

(height.

begin()

,height.

end())

;//按左端點排序;

//int cur=0;

//當前最大高度

int pre=0;

//前乙個的最大高度

m.insert(0

);//0先入隊,防止第乙個方塊沒了之後,m中沒元素

//有了0,就可以得到一塊結束後的0高度

for(

auto t:height));

pre=cur;}}

return res;}}

;

2 18學習記錄

主要內容 css知識複習 字元轉換 text transform none uppercase lowercase capitalize text decoration none underline overline through line blink 斜體 font style italic f...

2 18 陣列分割

題目概述 有乙個沒有排序,元素個數為2n的正整數陣列。要求把它分割為元素個數為n的兩個陣列,並使兩個子陣列的和最接近。假設陣列a 1.2n 所有元素的和是sum。模仿動態規劃解0 1揹包問題的策略,令s k,i 表示前k個元素中任意i個元素的和的集合。顯然 s k,1 s k,k s k,i s k...

2 18 共享記憶體通訊

1.基本概念 共享記憶體是ipc機制中的一種,作用是使得兩個不相關的程序訪問同一段記憶體,是一種程序間傳輸資料的一種有效方式。2.函式學習 2.1 建立 獲取共享記憶體 函式名 shmget 函式原型 man shmget int shmget key t key,size t size,int s...