這道題為什麼在leetcode裡試easy。。。懷疑人生。
之前做過一道在o(1)時間內找到最小值的棧(面試題30)和兩個棧實現佇列(面試題9),因此結合二者可以完成這道題。
第二種思路:
把有可能成為滑動視窗最大值的數值存入乙個兩端開口的佇列。
deque = collections.deque(
) res, n =
,len
(nums)
for i, j in
zip(
range(1
- k, n +
1- k)
,range
(n))
:if i >
0and deque[0]
== nums[i -1]
: deque.popleft(
)# 刪除 deque 中對應的 nums[i-1]
while deque and deque[-1
]< nums[j]
: deque.pop(
)# 保持 deque 遞減
)if i >=0:
0])# 記錄視窗最大值
return res
劍指Offer59 滑動視窗的最大值
1.維護乙個單調不嚴格遞減佇列deque o n 遍歷起始位置o n 對於每個視窗只需o 1 獲得最大值,空間o k deque最多存當前視窗內的所有元素 當當前視窗內元素不嚴格單減的時候 class solution 陣列為空,或視窗過大或過小 vector int res 存每個視窗的最大值 d...
劍指Offer 面試題59 佇列的最大值
題目 給定乙個陣列和滑動視窗的大小,請找出所有滑動視窗裡的最大值。例如,如果輸入陣列及滑動視窗的大小3,那麼一共存在6個滑動視窗,它們的最大值分別為。解決思路 利用雙端佇列 步驟插入數字 滑動視窗 佇列的下標 最大值122 0 2 n a2 32,3 1 3 n a3 42,3,4 2 4 44 2...
劍指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...