剑指offer之队列的最大值
題目描述:
請(qǐng)定義一個(gè)隊(duì)列并實(shí)現(xiàn)函數(shù) max_value 得到隊(duì)列里的最大值,要求函數(shù)max_value、push_back 和 pop_front 的均攤時(shí)間復(fù)雜度都是O(1)。
若隊(duì)列為空,pop_front 和 max_value 需要返回 -1
示例 1:
輸入:
[“MaxQueue”,“push_back”,“push_back”,“max_value”,“pop_front”,“max_value”]
[[],[1],[2],[],[],[]]
輸出: [null,null,null,2,1,2]
主要思想:
利用兩個(gè)隊(duì)列(一個(gè)單端隊(duì)列q,一個(gè)雙端隊(duì)列d)。q用來存儲(chǔ)隊(duì)列中的值,d用來存儲(chǔ)隊(duì)列的最大值。
對(duì)于max_value()函數(shù),當(dāng)隊(duì)列非空時(shí),返回d的隊(duì)首元素,否則返回-1。
這道題的關(guān)鍵在于最大值得存儲(chǔ)。此處利用雙端隊(duì)列的優(yōu)勢(shì),每次向隊(duì)列中插入數(shù)據(jù)時(shí),與d的隊(duì)尾元素相比較,如果比隊(duì)尾元素大,那么將隊(duì)尾元素彈出隊(duì)列,繼續(xù)循環(huán),最終維持雙端隊(duì)列d中的元素單調(diào)遞減。
對(duì)于隊(duì)列的彈出操作,如果q的首元素并非當(dāng)前元素的最大值,直接彈出隊(duì)列的值就可以了,如果為最大值時(shí),要同時(shí)對(duì)兩個(gè)隊(duì)列執(zhí)行彈出操作。
注意:上述代碼并非原創(chuàng),如原作者看到,可聯(lián)系刪除。
總結(jié)
以上是生活随笔為你收集整理的剑指offer之队列的最大值的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 恐怖游戏《松果体》Steam发售 取材《
- 下一篇: css现在还用浮动吗,css3-9 cs