Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크
빈 2D 바이너리 그리드가 제공됩니다. 그리드
크기의 xn
그리드는 지도를 나타냅니다. 0
는 물을 나타내고 1
은 처음에는 토지를 나타냅니다. 그리드
물 세포입니다(즉, 모든 세포는 0
'에스).
우리는 해당 위치의 물을 육지로 바꾸는 추가 토지 작업을 수행할 수 있습니다. 위치
어디 위치[i] = [ ri , c i ]
위치이다 (리 나는 , 씨 나는 )
우리가 운영해야 할 곳은 나는 일
작업.
반품 정수 배열 답변
어디 대답[나]
셀을 돌린 후의 섬 수입니다. (리 나는 , 씨 나는 )
땅으로.
안 섬 는 물로 둘러싸여 있으며 인접한 토지를 수평 또는 수직으로 연결하여 형성됩니다. 그리드의 네 모서리가 모두 물로 둘러싸여 있다고 가정할 수 있습니다.
예시 1:
입력: m = 3, n = 3, 위치 = [[0,0],[0,1],[1,2],[2,1]] 산출: [1,1,2,3] 설명: 처음에는 2D 그리드가 물로 채워집니다. - 작업 #1: addLand(0, 0)는 그리드[0][0]의 물을 1개의 섬으로 바꿉니다. - 작업 #2: addLand(0, 1) 그리드[0][1]의 물을 육지로 바꿉니다. - #3 작업: addLand(1, 2)는 그리드[1][2]의 물을 육지로 바꿉니다. - #4 작업: addLand(2, 1)은 그리드[2][1]의 물을 육지로 바꿉니다.
예 2:
입력: m = 1, n = 1, 위치 = [[0,0]] 산출: [1]
제약:
1 <= m, n, 위치.길이 <= 10 4
1 <= m * n <= 10 4
위치[i].길이 == 2
0 <= r 나는 < m
0 <= ci < n
후속 조치: 시간복잡도로 풀 수 있나요? O(k로그(mn))
, 어디 k == 위치.길이
?
파이썬
# 시간 복잡도: O(m*n) # 공간 복잡도: O(m*n) 입력 가져오기 목록 클래스 해결 방법: class UnionFind: def __init__(self, size): self.rep = [i for i in range(size )] self.rank = [0] * size self.count = 0 def find(self, node): if node != self.rep[node]: self.rep[node] = self.find(self.rep[ node]) return self.rep[node] def Union(self, node1, node2): rep1 = self.find(node1) rep2 = self.find(node2) if rep1 != rep2: if self.rank[rep1] > self.rank[rep2]: self.rep[rep2] = rep1 elif self.rank[rep2] < self.rank[rep1]: self.rep[rep1] = rep2 else: self.rep[rep2] = rep1 자기. 순위[rep1] += 1 self.count -= 1 def numIslands2(self, m: int, n: int, position: List[List[int]]) -> List[int]: uf = self.UnionFind(m * n) res = [] land_map = set() 행, col 위치: if (row, col) in land_map: res.append(uf.count) continue land_map.add((row, col)) uf.count += 1 for i, j in [(-1, 0), (1, 0), (0, 1), (0, -1)]: r, c = 행 + i, col + j if r < 0 또는 c < 0 또는 r >= m 또는 c >= n: land_map에서 (r, c)인 경우 계속: uf.union(row * n + col, r * n + c) res.append(uf.count) res m = 3 n = 3 위치 반환 = [[0, 0], [0, 1], [1, 2], [2, 1]] print(Solution().numIslands2(m, n, 위치))