1234567891011121314151617181920212223242526272829303132 |
- 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)
- // }
|