佇列的最大值
劍指 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 思路...