LeetCode - python - 547. 모멘트
2315 단어 Leetcode
하 나 를 정 하 다 N * N 행렬 M. 반 중 학생 간 의 친구 관 계 를 나타 낸다.만약 에 M [i] [j] = 1 은 i 번 째 와 j 번 째 학생 이 서로 친구 가 되 는 것 을 알 고 있 음 을 나타 낸다. 그렇지 않 으 면 모른다.너 는 모든 학생 들 이 이미 알 고 있 는 친구 권 의 총 수 를 출력 해 야 한다.
예시 1:
:
[[1,1,0],
[1,1,0],
[0,0,1]]
: 2
: 0 1 , 。
2 。 2。
예시 2:
:
[[1,1,0],
[1,1,1],
[0,1,1]]
: 1
: 0 1 , 1 2 , 0 2 , , 1。
주의:
N 은 [1, 200] 의 범위 내 에 있다
4. 567917. 모든 학생 에 게 M [i] [i] = 1 이 있 습 니 다
4. 567917. M [i] [j] = 1 이 있 으 면 M [j] [i] = 1 이 있다
첫 번 째 사고방식:
이용 하고 수집 하여 해결 하 다.
class UnionFindSet(object):
def __init__(self, grid):
m, n = len(grid), len(grid[0])
self.roots = [i for i in range(m)]
self.rank = [0 for i in range(m)]
self.count = n
def find(self, member):
tmp = []
while member != self.roots[member]:
tmp.append(member)
member = self.roots[member]
for root in tmp:
self.roots[root] = member
return member
def union(self, p, q):
parentP = self.find(p)
parentQ = self.find(q)
if parentP != parentQ:
if self.rank[parentP] > self.rank[parentQ]:
self.roots[parentQ] = parentP
elif self.rank[parentP] < self.rank[parentQ]:
self.roots[parentP] = parentQ
else:
self.roots[parentQ] = parentP
self.rank[parentP] -= 1
self.count -= 1
class Solution(object):
def findCircleNum(self, M):
"""
:type M: List[List[int]]
:rtype: int
"""
if not M or not M[0]:
return 0
ufs = UnionFindSet(M)
for i in range(len(M)):
for j in range(len(M[0])):
if M[i][j] == 1:
ufs.union(i, j)
return ufs.count
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
LeetCode 문제풀이 노트 113.경로 총 II경로 총 II 제목 요구 사항 문제풀이 두 갈래 나무와 목표와 뿌리 노드에서 잎 노드까지의 모든 경로를 찾는 것은 목표와 같은 경로입니다. 설명: 잎 노드는 하위 노드가 없는 노드를 가리킨다. 예: 다음과 같은 두 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.