劍指 滑動視窗的大小

2021-10-22 07:29:04 字數 1058 閱讀 3020

給定乙個陣列 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個 思路 完全不懂 滑動視窗的最大值總是儲存在佇列首部 佇列裡面的資料總是從大到小排列 當遇到比當前滑動視窗最大值更大...