İçeriğe atla
ΣDSA Patterns
Menü
Dil

Kuyruk ve Deque

Rehber 6 / 6 · Yol 6 / 6

Etkileşimli

Zihinsel model

Bu problem için animasyonlu çözüm. Adımları kaydır veya boşlukla duraklat; değişmezi yüksek sesle yeniden anlat.

Adım 1 / 6

window = 3000ms

ping(t) t anında bir çağrı kaydeder. [t-3000, t] içindeki çağrı sayısını döndür.

Demo önizleme: Bu çözümler otomatik test paketini geçiyor ama insan tarafından incelenmedi. Trade-off ve yazıları taslak olarak değerlendirin.

Number of Recent Calls

Problem (yeniden ifade)

ping(t) t anında (ms) bir çağrı kaydeder. [t-3000, t] aralığında kaç çağrı olduğunu döndür.

Sezgi

Zaman damgaları kuyruğu; t’yi enqueue et, t-3000’den öncekileri dequeue et, boyutu döndür.

Yaklaşımlar

Kayan kuyruk penceresi

Doğrulanmadı
Zaman O(1) amortizedAlan O(w)

Fikir. monoton artan t yalnızca önden çıkarmayı garanti eder.

Yürüyüş. ping(1)→1, ping(100)→2, ping(3001)→3, ping(3002)→3.

Trade-off. Olay deque’si queue-deque kayan pencere kalıbıdır.

Çözüm
export class RecentCounter {
  private q: number[] = [];
  ping(t: number): number {
    this.q.push(t);
    while (this.q[0]! < t - 3000) this.q.shift();
    return this.q.length;
  }
}
export class RecentCounter {
  private q: number[] = [];
  ping(t: number): number {
    this.q.push(t);
    while (this.q[0]! < t - 3000) this.q.shift();
    return this.q.length;
  }
}

Şablon bağlantısı

Queue & Deque son-olay izleme.

Yansıma