題目描述:
請定義乙個佇列並實現函式 max_value 得到佇列裡的最大值,要求函式max_value、push_back 和 pop_front 的均攤時間複雜度都是o(1)。
若隊列為空,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]
主要思想:
利用兩個佇列(乙個單端佇列q,乙個雙端佇列d)。q用來儲存佇列中的值,d用來儲存佇列的最大值。
對於max_value()函式,當佇列非空時,返回d的隊首元素,否則返回-1。
這道題的關鍵在於最大值得儲存。此處利用雙端佇列的優勢,每次向佇列中插入資料時,與d的隊尾元素相比較,如果比隊尾元素大,那麼將隊尾元素彈出佇列,繼續迴圈,最終維持雙端佇列d中的元素單調遞減。
對於佇列的彈出操作,如果q的首元素並非當前元素的最大值,直接彈出佇列的值就可以了,如果為最大值時,要同時對兩個佇列執行彈出操作。
class
maxqueue
intmax_value()
void
push_back
(int value)
d.push_back
(value)
; q.
push
(value);}
intpop_front()
q.pop();
return ans;}}
;
注意:上述**並非原創,如原作者看到,可聯絡刪除。 佇列的最大值 劍指Offer
題目描述 定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 題解 我對於這道題,剛開始看的稍微有點懵,後來才知道是描...
劍指Offer 佇列的最大值
請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例 1 輸入 maxqueue push back push ...
劍指Offer 查詢佇列中的最大值
題目描述 給定乙個陣列和滑動視窗k的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 分別找出這6個滑動視窗中的最大值,並儲存到乙個列表中。最簡單的思路就是分別找到這些滑動視窗,並用乙個陣列來儲存,...