資料結構專題之堆

2021-09-29 19:53:22 字數 1044 閱讀 5948

堆(heap)是乙個可以被看成近似完全二叉樹的陣列。樹上的每乙個結點對應陣列的乙個元素。除了最底層外,該樹是完全充滿的,而且是從左到右填充。

堆包括最大堆和最小堆:最大堆的每乙個節點(除了根結點)的值不大於其父節點;最小堆的每乙個節點(除了根結點)的值不小於其父節點。

堆常見的操作:

堆結構的乙個常見應用是建立優先佇列(priority queue)。

以下以 leetcode 堆問題進行分析

1046. 最後一塊石頭的重量

有一堆石頭,每塊石頭的重量都是正整數。

每一回合,從中選出兩塊最重的石頭,然後將它們一起粉碎。假設石頭的重量分別為 x 和 y,且 x <= y。那麼粉碎的可能結果如下:

最後,最多隻會剩下一塊石頭。返回此石頭的重量。如果沒有石頭剩下,就返回 0。

class

solution

if(stones.length ==2)

for(

int i = stones.length /2-

1; i >=

0; i--

)int temp = stones[1]

> stones[2]

? stones[1]

: stones[2]

;while

(temp !=0)

else

for(

int i =

2; i >=

0; i--

) temp = stones[1]

> stones[2]

? stones[1]

: stones[2]

;}return stones[0]

;}public

void

adjustheap

(int

arr,

int i,

int length)

if(arr[k]

> temp)

else

} arr[i]

= temp;

}}

資料結構 堆專題總結

專題主要內容 堆的概念 性質 堆的建立 堆的插入 刪除 堆的應用 堆的概念 堆 heap 這裡所說的堆是資料結構中的堆,而不是記憶體模型中的堆。堆通常是乙個可以被看做一棵樹,它滿足下列性質 性質一 堆中任意節點的值總是不大於 不小於 其子節點的值 性質二 堆總是一棵完全樹。將任意節點不大於其子節點的...

資料結構之堆

原帖 對於堆的資料結構的介紹,在網上搜了下,具體講的不是很多。發現比較好的一篇介紹堆的部落格是在此感謝他。通過對上面那篇部落格的學習,然後自己也去翻了下 演算法導論 裡面關於堆排序 heapsort 的介紹。這樣就對堆有了更加深刻的認識,在此,我結合自己的一點點理解,主要還是基於上面那篇部落格的內容...

資料結構之堆

堆 我們這裡指二叉堆 是一棵完全二叉樹,並且祖先節點的所有子孫節點都不小於 或不大於 祖先節點的值。通常我們把根節點作為第一層的話,那麼深度為h的堆就有2 h 1 2 h 1個節點,顯然擁有n個節點的堆,其高度為lgn。也就是說對堆進行插入語刪除操作我們都需要lgn的時間。由於堆的完全樹的性質,因此...