Algorithm
Detect Cycles in 2D Grid
Solution
class UnionFind:
def __init__(self, n: int):
self.n = n
self.setCount = n
self.parent = list(range(n))
self.size = [1] * n
def findset(self, x: int) -> int:
if self.parent[x] == x:
return x
self.parent[x] = self.findset(self.parent[x])
return self.parent[x]
def unite(self, x: int, y: int):
if self.size[x] < self.size[y]:
x, y = y, x
self.parent[y] = x
self.size[x] += self.size[y]
self.setCount -= 1
def findAndUnite(self, x: int, y: int) -> bool:
parentX, parentY = self.findset(x), self.findset(y)
if parentX != parentY:
self.unite(parentX, parentY)
return True
return FalseVideo GuideLeetcode Daily
Time Complexity
O(mn · \alpha(mn)
Space Complexity
O(mn)
