Apprenez Python à partir de la poupée ! Enregistrez les questions du processus d'apprentissage et de préparation aux tests Blue Bridge Cup Python, et enregistrez chaque instant.
Vous trouverez ci-joint un article récapitulatif : Pupils Blue Bridge Cup Python Breakthrough | Summary_COCOgsta's Blog-CSDN Blog
【Description】
Étant donné un tableau de longueur n et une fenêtre glissante de taille m (0<m≤n), veuillez trouver la valeur maximale dans toutes les fenêtres glissantes.
Par exemple, le tableau {2,6,4,9,8,5,5,2}, la taille de la fenêtre glissante est 3, puis il y a 6 fenêtres glissantes, et leurs valeurs maximales sont 6,9, 9,9, 8,5.
【Explication du code】
a = [0,2,6,4,9,8,5,5,2]
m = 3
for 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)
复制代码
#单调队列
a = [0,2,6,4,9,8,5,5,2]
q = [0,1,2,3,4,5,6,7,8]
m = 3
h = 0
t = -1
for i in range(1, len(a)):
#q[h]不在窗口[i-m+1]内,队头出队
if h<=t and q[h]<i-m+1:
h += 1
#当前值>=队尾值,队尾出队
while h<=t and a[i]>=a[q[t]]:
t -= 1
#下标入队,便于队头出队
t+=1
q[t] = i
#使用队头最大值
if i > m - 1: #满3个时才输出
print(a[q[h]])
复制代码
【résultat de l'opération】
6
9
9
9
8
5