239 滑動視窗最大值

2021-10-02 19:16:59 字數 1393 閱讀 2943

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 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

1.暴力 ,暴力也可以寫的很優雅...

2.雙指標+單調佇列(用o(1)的時間獲取區間的最值)

單調佇列注意的2點:

1.考慮隊首值什麼時候劃出

2.來的數大於佇列末尾時劃出不可能的最值

class solution(object):

def maxslidingwindow(self, nums, k):

if not nums or k>len(nums):

return

return [max(nums[i:i+k])for i in range(len(nums)-k+1)]

from collections import deque

class solution(object):

def maxslidingwindow(self, nums, k):

if not nums or k>len(nums):

return

q = deque()

res =

for i in range(len(nums)):

while q and nums[q[-1]]=k-1:

return res

class solution(object):

def maxslidingwindow(self, nums, k):

q=l=r=0

res=

while rnums[q[-1]]:

q.pop()

if relse:

r+=1

l+=1

while q and q[0]q.pop(0)

return res

239 滑動視窗最大值

239.滑動視窗最大值 solution deque solution maxindex 暴力法的時間複雜度為 o n k 弊端為每次掃瞄視窗的最大值,每兩次掃瞄之間都會存在重複的值比較,已經知道了他們的最大值是誰了,所以要減少比較次數 為什麼新增的是索引 將i加到隊尾 deque.addlast ...

239 滑動視窗最大值

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。高階 示例 輸入 nums 1,3,1,3,5,3,6,7 和 k 3 輸出 3,3,5,5,6,7 解釋 滑動視窗的位置...

239 滑動視窗最大值

給定乙個陣列 nums,有乙個大小為 k 的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k 個數字。滑動視窗每次只向右移動一位。返回滑動視窗中的最大值。可以想到維護乙個類似單調棧的資料結構,單調佇列,佇列內的資料嚴格單調遞減,因此每次尋找最大值時就直接返回隊頭即可,滿足o ...