日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)

發(fā)布時(shí)間:2023/12/2 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

堆基礎(chǔ)

堆(Heap)是具有這樣性質(zhì)的數(shù)據(jù)結(jié)構(gòu):1/完全二叉樹(shù) 2/所有節(jié)點(diǎn)的值大于等于(或小于等于)子節(jié)點(diǎn)的值:

圖片來(lái)源:這里

堆可以用數(shù)組存儲(chǔ),插入、刪除會(huì)觸發(fā)節(jié)點(diǎn)shift_down、shift_up操作,時(shí)間復(fù)雜度O(logn),可視化構(gòu)建堆

堆是優(yōu)先級(jí)隊(duì)列(Priority queue)的底層數(shù)據(jù)結(jié)構(gòu),較常使用優(yōu)先級(jí)隊(duì)列而非直接使用堆處理問(wèn)題。利用堆的性質(zhì)可以方便地獲取極值,例如 LeetCode 題目?215.?Kth Largest Element in an Array,時(shí)間復(fù)雜度O(nlogn):

//215. Kth Largest Element in an Arrayint findKthLargest(vector<int>& nums, int k) {
//默認(rèn)為大頂堆,等同于 priority_queue<int,vector<int>,less<int>> q;priority_queue
<int> q(nums.begin(),nums.end());for(int i=0;i<k-1;i++) q.pop();return q.top();}

?

相關(guān)LeetCode題:

215.?Kth Largest Element in an Array? 題解

703.?Kth Largest Element in a Stream? 題解

295.?Find Median from Data Stream? 題解

?

將頂部節(jié)點(diǎn)一一取出,即可實(shí)現(xiàn)堆排序,例如經(jīng)典的題目?23.?Merge k Sorted Lists,用優(yōu)先級(jí)隊(duì)列求解時(shí)間復(fù)雜度為O(nlogk),n為總元素?cái)?shù)、k為list數(shù),可視化堆排序

?

相關(guān)LeetCode題:

23.?Merge k Sorted Lists??題解

自定義優(yōu)先級(jí)

對(duì)于優(yōu)先級(jí)隊(duì)列,我們可以自定義優(yōu)先級(jí)判斷標(biāo)準(zhǔn),比如按元素頻次、距離、成本等。這時(shí)我們需要自定義優(yōu)先級(jí)隊(duì)列的比較方式:

struct compare{bool operator()(const pair<char,int> a,const pair<char,int> b){return b.second > a.second;} };//priority_queue<Type, Container, Functional>priority_queue<pair<char,int>,vector<pair<char,int>>,compare> pq;

?

相關(guān)LeetCode題:

451.?Sort Characters By Frequency??題解

347.?Top K Frequent Elements? 題解

692.?Top K Frequent Words? 題解

973.?K Closest Points to Origin? 題解

767.?Reorganize String??題解?

?

優(yōu)先級(jí)隊(duì)列與貪心

由優(yōu)先級(jí)隊(duì)列可方便地取得極值,而極值本身體現(xiàn)了貪心(Greedy)的思想;在用到貪心思路解題時(shí),可以考慮借助優(yōu)先級(jí)隊(duì)列獲取極值。

?

相關(guān)LeetCode題:

1046.?Last Stone Weight??題解

253.?Meeting Rooms II? 題解

871.?Minimum Number of Refueling Stops? 題解

502.?IPO? 題解

358.?Rearrange String k Distance Apart? 題解

?

優(yōu)先級(jí)隊(duì)列與BFS

在 算法與數(shù)據(jù)結(jié)構(gòu)基礎(chǔ) - 隊(duì)列(Queue) 介紹了常用隊(duì)列模擬廣度優(yōu)先搜索(BFS)過(guò)程,優(yōu)先級(jí)隊(duì)列作為特殊的隊(duì)列,同樣可以用于BFS、以實(shí)現(xiàn)對(duì)臨近節(jié)點(diǎn)按優(yōu)先級(jí)搜索。

?

相關(guān)LeetCode題:

778.?Swim in Rising Water? 題解

407.?Trapping Rain Water II? 題解

?

轉(zhuǎn)載于:https://www.cnblogs.com/bangerlee/p/11205539.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的算法与数据结构基础 - 堆(Heap)和优先级队列(Priority Queue)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。