package main func longestConsecutive(nums []int) (length int) { n := len(nums) if n <= 1 { return n } uf := NewUF(n) m := make(map[int]int) for i := 0; i < n; i++ { if _, ok := m[nums[i]]; !ok { m[nums[i]] = i if idL, okL := m[nums[i]-1]; okL { uf.Union(i, idL) } if idR, okR := m[nums[i]+1]; okR { uf.Union(i, idR) } } } for i := 0; i < n; i++ { if uf.Size[i] > length { length = uf.Size[i] } } return } // func main() { // println(longestConsecutive([]int{100, 4, 200, 1, 3, 2}), 4) // println(longestConsecutive([]int{0, -1}), 2) // }