佇列的最大值 劍指Offer

2021-10-10 20:08:41 字數 1044 閱讀 1460

題目描述:

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