請定義乙個佇列並實現函式 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]
那麼如何高效實現乙個始終遞減的佇列呢?我們只需要在插入每乙個元素 value 時,從佇列尾部依次取出比當前元素 value 小的元素,直到遇到乙個比當前元素大的元素 value 即可。
上面的過程需要從佇列尾部取出元素,因此需要使用雙端佇列來實現。另外我們也需要乙個輔助佇列來記錄所有被插入的值,以確定 pop_front 函式的返回值。
保證了佇列單調遞減後,求最大值時只需要直接取雙端佇列中的第一項即可。
**實現:
class
maxqueue
intmax_value()
void
push_back
(int value)
d.push_back
(value)
; q.
push
(value);}
intpop_front()
};
佇列的最大值 劍指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 ...
劍指Offer 查詢佇列中的最大值
題目描述 給定乙個陣列和滑動視窗k的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 分別找出這6個滑動視窗中的最大值,並儲存到乙個列表中。最簡單的思路就是分別找到這些滑動視窗,並用乙個陣列來儲存,...