Leetcode 984 Solution

This article provides solution to leetcode question 984 (most-stones-removed-with-same-row-or-column)

https://leetcode.com/problems/most-stones-removed-with-same-row-or-column

Solution

class FindUnionSet: def __init__(self, N): self.p = list(range(N))
def find(self, i): if self.p[i] == i: return i
self.p[i] = self.find(self.p[i]) return self.p[i]
def union(self, i, j): self.p[self.find(i)] = self.find(j)
class Solution: def removeStones(self, stones: List[List[int]]) -> int: fuset = FindUnionSet(len(stones))
ym = collections.defaultdict(list) xm = collections.defaultdict(list) for i, (s, d) in enumerate(stones): ym[s].append(i) xm[d].append(i)
for indexes in list(ym.values()) + list(xm.values()): if len(indexes) < 2: continue
for i in range(1, len(indexes)): fuset.union(indexes[0], indexes[i])
counters = collections.defaultdict(int) for i in range(len(stones)): counters[fuset.find(i)] += 1
ans = 0 for counter in counters.values(): ans += max(0, counter - 1) return ans