classUnionFind: def__init__(self): self.union_find = {} deffind(self, x): if x == self.union_find[x]: return x self.union_find[x] = self.find(self.union_find[x]); return self.union_find[x]; defmerge(self, x, y): self.union_find[self.find(x)] = self.find(y);
classSolution: deflongestConsecutive(self, nums: List[int]) -> int: union_find = UnionFind() union_find.union_find = {i:i for i in range(len(nums))} value_index_map = {} for i in range(len(nums)): if nums[i] in value_index_map.keys(): continue value_index_map.update({nums[i]: i}) if nums[i]+1in value_index_map.keys(): union_find.merge(i, value_index_map[nums[i]+1]) if nums[i]-1in value_index_map.keys(): union_find.merge(i, value_index_map[nums[i]-1]) result = 0 count = [0for i in range(len(nums))] for i in range(len(nums)): count[union_find.find(i)] += 1 result = max(count[union_find.find(i)], result) return result