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

Union Find

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 / 6
012

isConnected 3×3

Eyalet sayısı. 3 kent, 0—1 bağlı, 2 yalnız. Bağlı bileşenleri say.

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 Provinces

Problem (yeniden ifade)

isConnected matrisli n şehir. Bir province bağlı bir gruptur. Province sayısını döndür.

Sezgi

Bağlı çiftleri birleştir; cevap bileşen sayısıdır.

Yaklaşımlar

Union-Find

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

Fikir. matrix[i][j]==1 iken i-j üzerinde UF.

Yürüyüş. Tam bağlı → 1 province.

Trade-off. UF vs matriste DFS flood.

Çözüm
export function findCircleNum(isConnected: number[][]): number {
  const n = isConnected.length;
  const p = Array.from({ length: n }, (_, i) => i);
  const find = (x: number): number => (p[x] === x ? x : (p[x] = find(p[x]!)));
  let comp = n;
  for (let i = 0; i < n; i++) {
    for (let j = i + 1; j < n; j++) {
      if (isConnected[i]![j] === 1) {
        const a = find(i), b = find(j);
        if (a !== b) {
          p[b] = a;
          comp--;
        }
      }
    }
  }
  return comp;
}
export function findCircleNum(isConnected: number[][]): number {
  const n = isConnected.length;
  const p = Array.from({ length: n }, (_, i) => i);
  const find = (x: number): number => (p[x] === x ? x : (p[x] = find(p[x]!)));
  let comp = n;
  for (let i = 0; i < n; i++) {
    for (let j = i + 1; j < n; j++) {
      if (isConnected[i]![j] === 1) {
        const a = find(i), b = find(j);
        if (a !== b) {
          p[b] = a;
          comp--;
        }
      }
    }
  }
  return comp;
}

Şablon bağlantısı

Union-Find bileşenleri.

Yansıma