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

2021-08-20 23:20:25 字數 1141 閱讀 5372

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

外輪廓線的表示方法為若干三元組,每個三元組包含三個數字 (start, end, height),代表這段輪廓的起始位置,終止位置和高度。

請注意合併同樣高度的相鄰輪廓,不同的輪廓線在x軸上不能有重疊。

[

[1, 3, 3],

[2, 4, 4],

[5, 6, 1]

]

外輪廓線為:

[

[1, 2, 3],

[2, 4, 4],

[5, 6, 1]

]

來,上大餐:沒啥可想,1化2,比較器+儲存

public class zzzk_building 

} public static class nodecomparator implements comparator

if (o1.upis != o2.upis)

return 0;

} }public static list> building(int building)

arrays.sort(nodes, new nodecomparator());

treemaphtmap = new treemap();

treemapwtmap = new treemap();

for (int i = 0; i < nodes.length; i++) else

} else else }}

if (htmap.isempty()) else

} //泛式取代強制轉換

list> res = new arraylist>();

int start = 0;

int height = 0;

for (entryentry : wtmap.entryset())

start = curw;

height = curh;

}} return res;

}}

演算法 大樓輪廓問題

每棟樓有左邊界l,右邊界r,高度h,現在有n棟樓,有可能相互遮擋,問每個座標最大高度是?線段樹 or 有序表 時間o nlogn 線段樹 初始葉節點為0,非葉節點置為0x1000,乙個負數表示未處理,l,r 邊界更新線段樹節點最大值。輸出時,線段樹求解 0,n 1 若為負數,則找子節點,直到某個區間...

Java演算法之「兔子問題」

有乙隻兔子,從出生後第3個月起每個月都生只兔子,小兔子長到第三個月後每個月又生乙隻兔子,假如兔子都不死,問每個月的兔子總數為多少?分析 從第乙個兔子開始,第1個月1只兔子,由於 長到第三個月後每個月又生乙隻兔子 所以第2個月也是1只兔子,第3個月時可以生乙隻兔子,所以總數為2只,這時,其中有乙隻是以...

演算法之window問題(Java)

規定視窗最大範圍容量,持續更新其最大值。想法 左右雙標,保證範圍大小,用乙個雙端佇列儲存,保證 佇列中後面的要比前面的小,卻晚到的替代先到的,因為其晚過期。後面更新 去除左右雙標,減少多餘變數,用 i num 1 來確定 如下 public static int window int arr,int...