İçeriğe atla
CodeItRaw
Yığın & Kuyruk

Ders 3/4

"Her elemanın sağındaki ilk büyük eleman hangisi?" sorusunu iki iç içe döngüyle çözmek kolaydır ve yavaştır. Hile şu: cevabını henüz bulamamış elemanları bir yığında beklet. Yeni bir eleman geldiğinde, yığının tepesinde ondan küçük kim varsa cevabını bulmuştur.

answer = []
waiting = []
for v in values:
while waiting and waiting[-1] >= v:
waiting.pop()
answer.append(waiting[-1] if waiting else -1)
waiting.append(v)
Aynı fikrin aynadaki hâli: her elemanın solundaki en yakın küçük değer. Yeni gelen, kendisinden büyük ya da eşit olanları atar (onlar artık kimsenin en yakın küçüğü olamaz); yığının tepesinde kalan, aradığı değerdir. Görevlerde sağa bakacaksın ve bekleyenlerin cevabını gelen eleman verecek.

Yığındaki değerler aşağıdan yukarı hep aynı yönde sıralı kalır (gelen eleman sırayı bozanları atar), adı buradan gelir. İç içe while gözünü korkutmasın: her eleman yığına bir kez girer ve en çok bir kez çıkar, toplam iş 2n'yi geçmez.

Görevler

Görevler sırayla açılır. Hepsini çözünce sonraki ders açılır.

Bu dersin görevleri, önceki dersler bitince açılır. Anlatımı şimdiden okuyabilirsin.

  1. 01

    Monoton Yığın

    Kod Okuma · Çıktıyı Tahmin Et

  2. 02

    Sonraki Büyük

    Fonksiyon

Sırayı beklemeden çözmek istersen bütün problemler kilitsiz açık: Problemler listesi