Leetcode218 天際線問題 掃瞄線

2021-10-20 01:59:02 字數 1008 閱讀 8810

如圖,假設有一條線從左往右掃瞄陣列:

1、遇到左端點,則記錄當前x座標下的最大高度

2、遇到右端點,則記錄當前x座標下的最大高度

很明顯,我們可以採用大頂堆來儲存座標為x時,當前建築的高度h[x].

遇到左端點則把高度入堆,當前堆頂元素即為x處最大高度

遇到右端點,則把對應建築的左端點出堆,此時堆頂同樣是x處最大高度

func getskyline(buildings int) int 

// 排序,x小的排前面,x相同時高的排前面

sort.slice(heights, func(i, j int) bool

return heights[i][0] < heights[j][0]

}) var res int

// 堆中初始化0元素,用於遇到右端點時,能拿到[i,0]作為當前高度

h := heap

last := 0

for _, height := range heights else

}} // 這裡是為了不連續出現[4,8], [12,8]這種相同高度的情況

if last != h[0]

} return res

}// 大頂堆

type heap int

func (h heap) len() int

func (h heap) less(i, j int) bool

func (h heap) swap(i, j int)

func (h *heap) push(x inte***ce{})

func (h *heap) pop() inte***ce{}

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

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

218 天際線問題

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

multiset pair 218 天際線問題

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