947. Most Stones Removed with Same Row or Column
- Most Stones Removed with Same Row or Column python solution
题目描述
On a 2D plane, we place stones at some integer coordinate points. Each coordinate point may have at most one stone.
Now, a move consists of removing a stone that shares a column or row with another stone on the grid.
What is the largest possible number of moves we can make?
解析
本题想要我们移动尽可能多的石子
横或者纵坐标相等的石子会互相链接构成一个区域。
可移动石子最多数目就是,石子的总数减去独立区域的个数
class Solution:
def removeStones(self, stones: List[List[int]]) -> int:
UF = {}
def find(x):
if x != UF[x]:
UF[x] = find(UF[x])
return UF[x]
def union(x, y):
UF.setdefault(x, x)
UF.setdefault(y, y)
UF[find(x)] = find(y)
for i, j in stones:
union(i, ~j)
return len(stones) - len({find(x) for x in UF})
Reference
https://leetcode.com/problems/most-stones-removed-with-same-row-or-column/discuss/197668/Count-the-Number-of-Islands-O(N)