挑戰公升級之佇列的最大值

2021-10-19 09:19:13 字數 1524 閱讀 4484

佇列的最大值

劍指 offer 59 - ii. 佇列的最大值

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

在佇列發生更改時 記錄出最大值

-1[1] 1

[1,2] 2

[1,2,3] 3

[2,3] 3

[2,3,2,1] 3

[3,2,1] 3

[2,1] 2

因為增刪操作時 都可能影響最大值的變化

如果是新增操作,比較新元素和當前最大值之間,更大的值是新的最大值

如果是刪除操作,刪除的元素如果不是最大值,那麼最大值不變,如果是最大值,最大值要更改為剩餘元素的最大值

使用額外的佇列,來記錄最大值發生的變化

max佇列,隊頭元素是當前的最大值,而其他元素是未來可能成為最大值的候選值

新增元素 ele時 ele>max 取佇列中隊尾元素比較,如果滿足,進行覆蓋並且迴圈比較

直到把所有比它小的值都覆蓋為止

ele原佇列 max佇列

[1] [1]

[1,2] [2]

[1,2,3] [3]

[2,3] [3]

[2,3,2] [3,2]

[2,3,2,1] [3,2,1]

[3,2,1] [3,2,1]

[2,1] [2,1]

[2,1,4] [4]

public class maxqueue 

public int max_value()

// 新增元素 ele時 ele>max 取佇列中隊尾元素比較,如果滿足,進行覆蓋並且迴圈比較

// 直到把所有比它小的值都覆蓋為止

// elepublic void push_back(int value)

max.add(value);

}public int pop_front()

if (queue.isempty()) return -1;

return queue.poll();

}}

佇列的最大值

題目 給定乙個陣列和滑動視窗的大小,請找出所有滑動視窗裡的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個 滑動視窗,它們的最大值分別為,include include include using namespace std templateclass queuewithmax voi...

佇列的最大值

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

佇列的最大值

示例 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 2.1 思路...