3.最大(小)堆例項應用
參考最大最小堆的定義:
它是一顆完全二叉樹,它可以是空
樹中結點的值總是不小於(不大於)其孩子結點的值
每乙個結點的子樹也是乙個堆
make_heap()
,pop_heap()
,push_heap
()
它們包含在標頭檔案
中
1)make_heap
在容器範圍內,就地建堆,保證最大(小)值在所給範圍的最前面,其他值的位置不確定。
可以有兩個引數,也可以有三個引數,前兩個引數是指向開始元素的迭代器和指向結束元素的下乙個元素的迭代器。第三個引數是可選的,不選預設大頂堆。我們可以自定義比較函式來設定小頂堆,比如auto cmp = (const int x, const int y) ;
。
2)pop_heap
將堆頂(所給範圍的最前面)元素移動到所給範圍的最後,並且將新的最大(小)值置於所給範圍的最前面。
3)push_heap
在堆的基礎上進行資料的插入操作。需要注意的是,只有make_heap()和push_heap()同為大頂堆或小頂堆,才能插入。
大頂堆:
#include
#include
#include
using
namespace std;
intmain()
;// generate heap in the range of numsector
make_heap
(nums.
begin()
, nums.
end())
; cout <<
"initial max value : "
<< nums.
front()
<< endl;
// pop max value
pop_heap
(nums.
begin()
, nums.
end())
; nums.
pop_back()
; cout <<
"after pop, the max vsalue : "
<< nums.
front()
<< endl;
// push a new value
nums.
push_back(6
);push_heap
(nums.
begin()
, nums.
end())
; cout <<
"after push, the max value : "
<< nums.
front()
<< endl;
system
("pause");
return0;
}
結果:
initial max value : 5
after pop, the max vsalue : 4
after push, the max value : 6
小頂堆:
#include
#include
#include
using
namespace std;
intmain()
; vector<
int> nums2 =
;// generate heap in the range of numsector
make_heap
(nums2.
begin()
, nums2.
end(
), cmp)
; cout <<
"initial min value : "
<< nums2.
front()
<< endl;
// pop max value
pop_heap
(nums2.
begin()
, nums2.
end(
), cmp)
; nums2.
pop_back()
; cout <<
"after pop, the min vsalue : "
<< nums2.
front()
<< endl;
// push a new value
nums2.
push_back(0
);push_heap
(nums2.
begin()
, nums2.
end(
), cmp)
; cout <<
"after push, the min value : "
<< nums2.
front()
<< endl;
system
("pause");
return0;
}```
```bash
initial min value :
10after pop, the min vsalue :
20after push, the min value :
0
輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,。
class
solution
}//使其從小到大輸出
sort_heap
(res.
begin()
,res.
end())
;return res;}}
;
牛客網
c++ make_heap(), pop_heap()函式
c++ make_heap(), push_heap(),pop_heap()函式
C 構建最小堆 最大堆
完全二叉樹 每個節點的值都大於 最大堆 或都小於 最小堆 子節點的值 堆只是一種資料的組織形式,儲存結構可以用陣列,在構建堆的過程中,可以使用完全二叉樹的性質求父子節點的下標。父節點的下標 向下取整 子節點下標 1 2 include include include include include ...
最小堆 最大堆的實現 c
最小堆 templateclass minheap int size const t min minheap insert const t x minheap deletemin t x void initialize t a,int size,int arraysize void deactiva...
c 實現最大堆和最小堆
堆是具有以下特性的完全二叉樹,每個結點的值都大於或等於其左右孩子結點的值,叫做最大堆 每個結點的值都小於或等於其左右孩子結點的值,叫做最小堆。vector int nums 1 如果使用nums構建最大堆 make heap nums.begin nums.end 或 make heap nums....