🚀总结
📇题目
⭐思路
- 定义双向队列,用于维持窗口内最大值;
- 遍历数组中每一个数字:
- 如果队尾元素小于等于当前数字,则出队,确保队列的单调性;
- 将当前数字入队;
- 如果队首元素离开窗口,则出队;
- 记录结果
🛠️代码
class Solution:
def maxSlidingWindow(self, nums: List[int], k: int) -> List[int]:
res = []
q = deque() # 定义双向队列
for idx, num in enumerate(nums): # 遍历数组中的每一个数字
while q and nums[q[-1]] <= num:
q.pop() # 确保队列元素单调,队首元素最大
q.append(idx)
if q[0] <= idx - k: # 队首元素离开窗口
q.popleft() # 队首元素出队
if idx >= k - 1: # 从 k - 1 之后开始记录结果
res.append(nums[q[0]])
return res