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

Aralıklar

Rehber 4 / 6 · Yol 4 / 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 / 7
[0,30]
[5,10]
[15,20]

olaylar = start +1, end −1

Toplantı odaları: aralıkları giriş/çıkış olayına çevir, soldan sağa tara.

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

Meeting Rooms II

Problem (yeniden ifade)

Toplantı zaman aralıkları verildiğinde, gereken minimum konferans odası sayısını bul.

Sezgi

Başlangıç ve bitişleri sırala; süpür: start oda sayısını artırır, end serbest bırakır; tepeyi izle.

Yaklaşımlar

Sweep line

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

Fikir. Sıralı start/end üzerinde two pointers.

Yürüyüş. [[0,30],[5,10],[15,20]] → 2 oda.

Trade-off. Sweep vs bitiş zamanlarının min-heap’i.

Çözüm
export function minMeetingRooms(intervals: number[][]): number {
  const starts = intervals.map((x) => x[0]!).sort((a, b) => a - b);
  const ends = intervals.map((x) => x[1]!).sort((a, b) => a - b);
  let i = 0, j = 0, cur = 0, peak = 0;
  while (i < starts.length) {
    if (starts[i]! < ends[j]!) {
      cur++;
      peak = Math.max(peak, cur);
      i++;
    } else {
      cur--;
      j++;
    }
  }
  return peak;
}
export function minMeetingRooms(intervals: number[][]): number {
  const starts = intervals.map((x) => x[0]!).sort((a, b) => a - b);
  const ends = intervals.map((x) => x[1]!).sort((a, b) => a - b);
  let i = 0, j = 0, cur = 0, peak = 0;
  while (i < starts.length) {
    if (starts[i]! < ends[j]!) {
      cur++;
      peak = Math.max(peak, cur);
      i++;
    } else {
      cur--;
      j++;
    }
  }
  return peak;
}

Şablon bağlantısı

Aralık sweep / odalar.

Yansıma