Asosiy tarkibga o‘tish

O‘rganish

Kirish
Qo‘llanma

Qo‘llanma · Dasturlash

sliding-window

Masalalar tez orada

Nazariya

Siljuvchi oyna — massivda ketma-ket oraliqni ikki ko‘rsatkich (left, right) bilan ushlab, uni o‘ngga suramiz. Har element oynaga bir marta kiradi va bir marta chiqadi — jami O(n).

Belgilangan uzunlikdagi oyna

window = sum(a[:k])
best = window
for i in range(k, len(a)):
    window += a[i] - a[i - k]     # yangisi kiradi, eskisi chiqadi
    best = max(best, window)

O‘zgaruvchan oyna: shartga mos eng uzun oraliq

left = total = best = 0
for right, x in enumerate(a):
    total += x
    while total > limit:          # shart buzildi — chapdan qisqartiramiz
        total -= a[left]
        left += 1
    best = max(best, right - left + 1)

Takrorlanmas belgili eng uzun qism satr kabi masalalarda oyna ichidagi belgilar dict/set da saqlanadi.

Bu mavzu bo‘yicha masalalar tez orada qo‘shiladi.

Shu mavzu kirgan kurslar

Menyu

Ko‘rinish

Klaviatura yorliqlari

Ctrl K yoki /
Qidirish va buyruqlar
g h
Bosh sahifa
g p
Masalalar
g c
Musobaqalar
g r
Reyting
Ctrl Enter
Masala sahifasida — yechimni yuborish
?
Shu oyna