給定乙個陣列 nums 和滑動視窗的大小 k,請找出所有滑動視窗裡的最大值。
示例:輸入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3
輸出: [3,3,5,5,6,7]
解釋:滑動視窗的位置 最大值
[1 3 -1] -3 5 3 6 7 3
1 [3 -1 -3] 5 3 6 7 3
1 3 [-1 -3 5] 3 6 7 5
1 3 -1 [-3 5 3] 6 7 5
1 3 -1 -3 [5 3 6] 7 6
1 3 -1 -3 5 [3 6 7] 7
你可以假設 k 總是有效的,在輸入陣列不為空的情況下,1 ≤ k ≤ 輸入陣列的大小。
class
solution
return v;}}
;
演算法流程:
初始化: 雙端佇列 dequedequedeque ,結果列表 resresres ,陣列長度 nnn ;
滑動視窗: 左邊界範圍 i∈[1−k,n+1−k]i \in [1 - k, n + 1 - k]i∈[1−k,n+1−k] ,右邊界範圍 j∈[0,n−1]j \in [0, n - 1]j∈[0,n−1] ;
若 i>0i > 0i>0 且 隊首元素 deque[0]deque[0]deque[0] === 被刪除元素 nums[i−1]nums[i - 1]nums[i−1] :則隊首元素出隊;
刪除 dequedequedeque 內所有 主要需要用到雙向佇列:
deque的常用成員函式
deque deq;
deq[ ]:用來訪問雙向佇列中單個的元素。
deq.front():返回第乙個元素的引用。
deq.back():返回最後乙個元素的引用。
deq.push_front(x):把元素x插入到雙向佇列的頭部。
deq.pop_front():彈出雙向佇列的第乙個元素。
deq.push_back(x):把元素x插入到雙向佇列的尾部。
deq.pop_back():彈出雙向佇列的最後乙個元素。
劍指 74,滑動視窗
題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 思路 我們採用乙個佇列來儲存視窗,遍歷所有數字,依次壓入。首先,如果seq有數字,就使得要壓入的這個是如果大的話壓...
劍指offer 滑動視窗問題
給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 本人思路 每次滑動,總是減去乙個值,新增乙個值 如果新增值大於上乙個視窗的最大值,那麼新增值為本視窗的最大值 否則,如果上乙...
滑動視窗的大小
題目描述 給定乙個陣列和滑動視窗的大小,找出所有滑動視窗裡數值的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,他們的最大值分別為 針對陣列的滑動視窗有以下6個 思路 完全不懂 滑動視窗的最大值總是儲存在佇列首部 佇列裡面的資料總是從大到小排列 當遇到比當前滑動視窗最大值更大...