1.維護乙個單調不嚴格遞減佇列deque:o(n):遍歷起始位置o(n),對於每個視窗只需o(1)獲得最大值,空間o(k):deque最多存當前視窗內的所有元素(當當前視窗內元素不嚴格單減的時候)
class
solution
;//陣列為空,或視窗過大或過小
vector<
int> res;
//存每個視窗的最大值
deque<
int> dq;
//單調遞減佇列
for(
int i =
0; i < k;
++i)
res.
push_back
(dq.
front()
);//第乙個視窗的最大值
for(
int i =
1; i <= n - k;
++i)
return res;}}
;
更通用的寫法是存索引 劍指offer59題 滑動視窗的最大值
給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 1.遍歷每個視窗最大值,存入陣列 class solution res.push back temp left right re...
劍指offer 滑動視窗問題
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 本人思路 每次滑動,總是減去乙個值,新增乙個值 如果新增值大於上乙個視窗的最大值,那麼新增值為本視窗的最大值 否則,如果上乙...
劍指offer59 I 滑動視窗的最大值
題目描述 給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。解析解法一 沒有任何優化,直接擷取陣列,依次遍歷求各陣列最大值 public int maxslidingwindow int nums,int k maxnums i max return maxnums 解法二...