搜索
写经验 领红包
 > 美容

小学生蓝桥杯Python闯关 | 单调队列-滑动窗口最大值

导语:小学生蓝桥杯Python闯关 | 单调队列-滑动窗口最大值

学习Python从娃娃抓起!记录下蓝桥杯Python学习和备考过程中的题目,记录每一个瞬间。

附上汇总贴:小学生蓝桥杯Python闯关 | 汇总_COCOgsta的博客-CSDN博客

【题目描述】

给定一个长度为n的数组和一个大小为m的滑动窗口(0<m≤n),请找出所有滑动窗口里的最大值。

例如,数组{2,6,4,9,8,5,5,2},滑动窗口的大小为3,那么一共存在6个滑动窗口,它们的最大值分别为6,9,9,9,8,5。

【代码详解】

a = [0,2,6,4,9,8,5,5,2]m = 3for i in range(m, len(a)):    mx = a[i]    for j in range(i-m+1, i+1):        mx = max(mx, a[j])    print(mx)复制代码
q[h]不在窗口[i-m+1]内,队头出队    if h<=t and q[h]<i-m+1:        h += 1    下标入队,便于队头出队    t+=1    q[t] = i    满3个时才输出        print(a[q[h]])复制代码

【运行结果】

699985