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

Yığın ile Ayrıştırma

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
10
2
-5
yığın
∅

Asteroidler [10, 2, -5]. Pozitif sağa, negatif sola uçar. Yalnızca zıt komşular çarpışı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.

Asteroid Collision

Problem (yeniden ifade)

Çizgi üzerinde asteroitler: pozitif = sağa, negatif = sola, mutlak değer = boyut. Zıt komşular çarpışır; küçük patlar, eşitse ikisi de. Aynı yön asla çarpışmaz. Hayatta kalanları döndür.

Sezgi

Soldan sağa hayatta kalanlar yığını. Yalnızca sola giden bir kaya, sağa giden tepeye çarpabilir.

Yaklaşımlar

Çarpışma yığını simülasyonu

Doğrulanmadı
Zaman O(n)Alan O(n)

Fikir. Yeni a < 0 ve yığın tepesi > 0 iken boyuta göre çöz; a hayatta kalırsa it.

Adım adım. [5,10,-5] → [5,10]; [8,-8] → []; [10,2,-5] → [10].

Trade-off’lar. Her asteroit yığına en fazla bir kez girer/çıkar → O(n).

Çözüm
export function asteroidCollision(asteroids: number[]): number[] {
  const stack: number[] = [];
  for (const a of asteroids) {
    let alive = true;
    while (
      alive &&
      a < 0 &&
      stack.length > 0 &&
      stack[stack.length - 1]! > 0
    ) {
      const top = stack[stack.length - 1]!;
      if (top < -a) {
        stack.pop();
        continue;
      } else if (top === -a) {
        stack.pop();
      }
      alive = false;
    }
    if (alive) stack.push(a);
  }
  return stack;
}
export function asteroidCollision(asteroids: number[]): number[] {
  const stack: number[] = [];
  for (const a of asteroids) {
    let alive = true;
    while (
      alive &&
      a < 0 &&
      stack.length > 0 &&
      stack[stack.length - 1]! > 0
    ) {
      const top = stack[stack.length - 1]!;
      if (top < -a) {
        stack.pop();
        continue;
      } else if (top === -a) {
        stack.pop();
      }
      alive = false;
    }
    if (alive) stack.push(a);
  }
  return stack;
}

Şablon bağlantısı

Çarpışma / iç içe çözümün yığın simülasyonu.

Yansıma