|
@@ -0,0 +1,32 @@
|
|
|
+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)
|
|
|
+// }
|