劍指 Offer 59 II 佇列的最大值

2021-10-23 14:47:36 字數 1468 閱讀 7276

題目描述:

請定義乙個佇列並實現函式 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]

示例 2:

輸入:[「maxqueue」,「pop_front」,「max_value」]

[,,]

輸出: [null,-1,-1]

限制:

1 <= push_back,pop_front,max_value的總算子 <= 10000

1 <= value <= 10^5

方法1:

主要思路:

(1)使用乙個佇列正常的儲存佇列元素,使用乙個雙端佇列,儲存當前佇列內的最大值;

(2)雙端佇列的儲存時,從隊尾儲存,若當前要儲存的元素小於等於隊尾的元素,則直接將該元素壓入隊尾,否則,彈出隊尾的元素,直到要儲存的元素小於等於隊尾元素,或雙端隊列為空,壓入當前元素;

(3)彈出元素時,正常彈出對頭的元素,同時比較佇列的對頭元素和雙端佇列的對頭元素是否相同,若相同,則同時彈出雙端佇列的對頭元素;

(4)找最大值時,直接從雙端佇列的對頭彈出即可;

class

maxqueue

intmax_value()

return q2.

front()

;}void

push_back

(int value)

q2.push_back

(value);}

intpop_front()

int tmp=q1.

front()

; q1.

pop();

//看條件,彈出雙端佇列頭部

if(q2.

front()

==tmp)

return tmp;}}

;/**

* your maxqueue object will be instantiated and called as such:

* maxqueue* obj = new maxqueue();

* int param_1 = obj->max_value();

* obj->push_back(value);

* int param_3 = obj->pop_front();

*/

劍指 Offer 59 II 佇列的最大值

題目描述 請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例1 輸入 maxqueue push back p...

劍指Offer 59 II 佇列的最大值

請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 額外維護乙個雙端佇列,用來儲存當前佇列可能的最大值,且是有序的,...

劍指 Offer 59 II 佇列的最大值

請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例 1 輸入 maxqueue push back push ...