演算法 大樓輪廓問題

2021-09-23 14:34:00 字數 437 閱讀 3846

每棟樓有左邊界l,右邊界r,高度h,現在有n棟樓,有可能相互遮擋,問每個座標最大高度是?

線段樹 or 有序表 ? 時間o(nlogn)

線段樹:

初始葉節點為0,非葉節點置為0x1000,乙個負數表示未處理,[l,r]邊界更新線段樹節點最大值。

輸出時,線段樹求解[0,n-1],若為負數,則找子節點,直到某個區間找到乙個非0的數。

有序表:

所有樓按左邊界,右邊界拆分成兩種記錄,(座標loc,高度h,狀態),其中狀態分為,加入 or 刪除,所有左節點為加入狀態,所有右節點為刪除狀態。

將所有記錄按座標排序。

從0開始遍歷每個座標,同時,維護另乙個有序表,結構為(高度,次數),表示高度h出現了幾次。

然後加入 or 刪除 狀態就是對這個有序表進行新增或減少。

由於有序表的特性,可以o(1)獲得當前座標最大高度。

大樓輪廓線

輸入第一行乙個數表示有n座大樓,後面依次輸入n行,每一行表示大樓的起始點,終點和高度,輸出為大樓輪廓資訊 如下圖 第一行輸出為3 後面有三行輸入表示大樓的資訊 第二行為 1 3 3 第三行為 2 4 4 第三行為 5 6 1 輸出大樓輪廓資訊 第一行 1 2 3 第二行 2 4 4 第三行 5 6 ...

演算法 摩天大樓問題

看一下題目描述 小q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。小q從第一棟一直走到了最後一棟,小q從來沒有看到過這麼多高樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住 暴力求解的方式比較簡單,就是選...

演算法之樓輪廓問題(Java)

水平面上有 n 座大樓,每座大樓都是矩陣的形狀,可以用乙個三元組表示 start,end,height 分別代表其在x軸上的起點,終點和高度。大樓之間從遠處看可能會重疊,求出 n 座大樓的外輪廓線。外輪廓線的表示方法為若干三元組,每個三元組包含三個數字 start,end,height 代表這段輪廓...