leetcode Longest Consecutive Sequence

1. 题目大意

求解在一个序列中最长的连续子序列,其中的序列不需要保持相对的顺序关系。

2. 思路

使用map去记录数据是否存在,然后对每个数字进行操作,如果存在比他小1的数字,那么不操作,
如果不存在,那么说明此时的数字是序列中最小的数字,然后不断向后进行查找。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package main

func max(x, y int) int {
if x > y {
return x
}
return y
}
func longestConsecutive(nums []int) int {
m := make(map[int]bool)
for _, i := range nums {
m[i] = true
}
ans := 0
for _, i := range nums {
if _, ok := m[i-1]; !ok {
y := i + 1
len := 1
for {
_, ok := m[y]
if !ok {
break
}
len++
y++
}
ans = max(ans, len)
}
}
return ans
}