题目列表
题目分析
并查集需要两种操作:
parent = {}
def find(x):
parent.setdefault(x, x)
if parent[x] == x:
return parent[x]
parent[x] = find(parent[x])
return parent[x]
def union(x, y):
parent[find(x)] == find(y)
题目代码
- 朋友圈
class Solution(object):
self.parent = []
def find(self, x):
if self.parent[x] == x:
return x
self.parent[x] = self.find(self.parent[x])
return self.parent[x]
def union(self, x, y):
root_x = self.find(x)
root_y = self.find(y)
if root_x != root_y:
self.parent[root_x] = root_y
def findCircleNum(self, M):
"""
:type M: List[List[int]]
:rtype: int
"""
num = len(M)
self.parent = [i for i in range(num)]
for i in range(num):
for j in range(num):
if M[i][j] == 1:
self.union(i, j)
count = 0
for i in range(num):
if i == self.parent[i]:
count += 1
return count
- 冗余连接
class Solution(object):
def findRedundantConnection(self, edges):
"""
:type edges: List[List[int]]
:rtype: List[int]
"""
parent = {}
def find(x):
parent.setdefault(x, x)
if parent[x] == x:
return parent[x]
parent[x] = find(parent[x])
return parent[x]
def union(x, y):
root_x = find(x)
root_y = find(y)
if root_x != root_y:
parent[root_x] = root_y
return False
return True
for u, v in edges:
if union(u, v):
return [u, v]
return