128.go 588 B

1234567891011121314151617181920212223242526272829303132
  1. package main
  2. func longestConsecutive(nums []int) (length int) {
  3. n := len(nums)
  4. if n <= 1 {
  5. return n
  6. }
  7. uf := NewUF(n)
  8. m := make(map[int]int)
  9. for i := 0; i < n; i++ {
  10. if _, ok := m[nums[i]]; !ok {
  11. m[nums[i]] = i
  12. if idL, okL := m[nums[i]-1]; okL {
  13. uf.Union(i, idL)
  14. }
  15. if idR, okR := m[nums[i]+1]; okR {
  16. uf.Union(i, idR)
  17. }
  18. }
  19. }
  20. for i := 0; i < n; i++ {
  21. if uf.Size[i] > length {
  22. length = uf.Size[i]
  23. }
  24. }
  25. return
  26. }
  27. // func main() {
  28. // println(longestConsecutive([]int{100, 4, 200, 1, 3, 2}), 4)
  29. // println(longestConsecutive([]int{0, -1}), 2)
  30. // }