128. 最长连续序列
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
解题思路:
- 将所有元素添加到集合中: 这样可以在 O(1) 时间内检查某个元素是否存在。
- 遍历集合中的每个元素: 如果当前元素的前驱元素(即 num - 1)不存在于集合中,则说明当前元素是一个连续序列的起点。 接着,顺序查找当前元素的后续元素,计算当前序列的长度。
- 记录最长的序列长度: 在遍历过程中,保持记录最大序列长度。
func longestConsecutive(nums []int) int {
var numSet = make(map[int]bool)
for _, num := range nums {
numSet[num] = true
}
var result int
// 检查 num-1 是否存在集合,即可判断是否是序列起点
for num := range numSet {
if !numSet[num-1] {
currNum := num
currSeq := 1
for numSet[currNum+1] {
currNum++
currSeq++
}
if currSeq > result {
result = currSeq
}
}
}
return result
}