題目描述:
定義乙個佇列並實現函式 max_value 得到佇列裡的最大值,要求函式max_value、push_back 和 pop_front 的均攤時間複雜度都是o(1)。
若隊列為空,pop_front 和 max_value 需要返回 -1
題解:我對於這道題,剛開始看的稍微有點懵,後來才知道是描述的有點問題。
這題主要就是返回當前佇列的最大值 push_back()和pop_front()就是兩個方法,push_back()用來新增元素,pop_front()彈出元素。
對於這道題,其實可以用乙個輔助佇列d來完成,d佇列儲存依次遞減的最大值,即首位當前q佇列最大值,當q佇列彈出最大值的時候,d佇列彈出隊首元素。具體描述 ,在注釋裡面更清晰。
class
maxqueue
//返回當前q佇列的最大值 ;就可以直接返回d佇列隊首元素
public
intmax_value()
return d.
peekfirst()
;}// push_back(const t& x):雙端佇列尾部增加乙個元素x
//如果新增的元素value比隊尾元素大 就把隊尾元素刪除,直到value比隊尾元素小
public
void
push_back
(int value)
//d和q兩個佇列都增加新的值value。
d.offerlast
(value)
; q.
offer
(value);}
//pop_front():刪除雙端佇列中最前乙個元素
//pop_front就是彈出q佇列隊首元素, 如果q佇列隊首元素和d佇列隊首元素相同,d佇列隊首元素彈出。
public
intpop_front()
int ans = q.
poll()
;if(ans == d.
peekfirst()
)return ans;
}}
劍指Offer 佇列的最大值
請定義乙個佇列並實現函式 max value 得到佇列裡的最大值,要求函式max value push back 和 pop front 的均攤時間複雜度都是o 1 若隊列為空,pop front 和 max value 需要返回 1 示例 1 輸入 maxqueue push back push ...
劍指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個滑動視窗中的最大值,並儲存到乙個列表中。最簡單的思路就是分別找到這些滑動視窗,並用乙個陣列來儲存,...