LeetCode 實現最大堆

2021-10-20 10:46:09 字數 1074 閱讀 7919

優先佇列(priority queue)可以在o(1)時間內獲取最大值,並且在0(logn)時間內取出最大值或插入任意值.

優先佇列常常用堆(heap)來實現,堆是乙個完全二叉樹,其每個節點的值總是大於等於或小於等於子節點的值.實際

實現堆時,通常用乙個陣列而不是指標建立一盒樹.這是因為堆是完全二叉樹,所以利用陣列表示時,

(1)若根節點的位置為0,則位置i的節點的父節點一定為(i-1)/2,而它的兩個字節點的位置一定為2i+1和2i+2.

(2)若根節點的位置為1,則位置i的節點的父節點一定為i/2,而它的兩個字節點的位置一定為2i和2i+1.

堆的實現方式為:

如果乙個節點有兩個子節點,總是交換最大的子節點.

(1)上浮

如果乙個節點比父節點大,那麼需要交換這兩個節點,交換後還可能比它新的父節點大,因此需要不斷地進行比較和交換

操作.(2)下浮

類似地,如果乙個節點比父節點小,也需要不斷地向下進行比較和交換操作.

make_heap函式預設最大堆,less(),利用vector實現最大堆

#include #include using namespace std;

//根節點初始下標為1

class maxheap

//插入任意值,把新的數字放在最後一位,然後上浮

void push(int k)

//刪除最大值,把最後乙個數字挪到開頭,然後下沉

void pop()

//列印

void print()

}private:

//上浮

void swim(int pos)

}private:

vectorheap;

};int main(int argc,char* ar**);

maxheap heap;

for(auto& n:nums)

heap.print();

cout

heap.print();

return 0;

}

最大堆實現,python

堆 heap class maxheap 索引0不用,所以陣列大小應該是 n 1 左節點2i 右節點2i 1,父節點 i 2 def init self self.data 堆陣列容量不知道 self.count len self.data def size self return self.cou...

C 最大堆實現

max heap.h pragma once include template class max heap node heap 最大堆 uint32 t max size 最大儲存數 uint32 t size 儲存數 擴容 void expansion 刪除指定下標節點 void del nod...

python實現最大堆

堆是利用的完全二叉樹的性質,並且利用陣列來實現的一種特殊資料結構 class myheap object max heap def init self self.heap def add self,item self.heapity len self.heap 1 def show self pri...