1. 程式人生 > 實用技巧 >LeetCode滑動視窗239

LeetCode滑動視窗239

給定一個數組 nums,有一個大小為k的滑動視窗從陣列的最左側移動到陣列的最右側。你只可以看到在滑動視窗內的 k個數字。滑動視窗每次只向右移動一位。

返回滑動視窗中的最大值。

我的程式碼:

 1 class Solution:
 2     def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
 3         res = []
 4         dq = [] # 滑動視窗,存放索引
 5         if len(nums)<1 or k<1:
 6             return
res 7 for i in range(0,k,1): # 第一個視窗 8 while len(dq) !=0 and nums[i]>nums[dq[-1]]: # 後面的大,前面肯定不是最大,應該刪除 9 dq.pop(-1) 10 dq.append(i) 11 res.append(nums[dq[0]]) # 將第一個視窗最大值放入結果中 12 for j in range(k,len(nums),1): 13 # nums[j]是否比前面大,刪除尾部
14 while len(dq)!=0 and nums[j]>nums[dq[-1]]: 15 dq = dq[0:-1] 16 # 前面是否超出視窗大小,是否應該滑出 17 if len(dq)!=0 and j-dq[0]>=k: 18 dq = dq[1:] 19 dq.append(j) 20 res.append(nums[dq[0]]) 21 return res 22 23
24 25 26 27

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/sliding-window-maximum