劍指offer之佇列的最大值

2021-10-07 19:31:46 字數 885 閱讀 5796

題目描述:

請定義乙個佇列並實現函式 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個滑動視窗中的最大值,並儲存到乙個列表中。最簡單的思路就是分別找到這些滑動視窗,並用乙個陣列來儲存,...