Grokking Data Structures & Algorithms for Coding Interviews
Ask Author
Back to course home

0% completed

Vote For New Content
Mohammed Dh Abbas
Another way to go about. This solution does path compression and ranking

Mohammed Dh Abbas

Aug 1, 2024

class UnionFind: def __init__(self): self.parents = {} self.rank = {} def find(self, u): parent = self.parents.get(u, u) if parent == u: self.parents[u] = u return self.parents[u] self.parents[u] = self.find(parent) return self.parents[u] def union(self, u, v): par_u = self.find(u) par_v = self.find(v) if par_u == par_v: return if self.rank.get(par_u, 0) < self.rank.get(par_v, 0): self.parents[par_u] = par_v elif self.rank.get(par_v, 0) < self.rank.get(par_u, 0): self.parents[par_v] = par_u else: self.rank[par_u] = self.rank.get(par_u, 0) + 1 self.parents[par_u] = par_v class Solution: def findProvinces(self, isConnected): uf = UnionFind() for i in range(len(isConnected)): for j in range(len(isConnected[i])): if isConnected[i][j] == 1: uf.union(i, j) result = set() for parant in uf.parents: result.add(uf.find(parant)) return len(result)

0

0

Comments
Comments

On this page