128. 最长连续序列
【困难】
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
Code
// 解题思路
// 将所有nums中元素录入numMap
// 对每个numMap中元素,检测是否是第一个起始元素,如果不是起始元素,skip;如果是,对该元素循环+1从numMap找到该元素对应的最长currentLength
// longest = max(longest, currentLength)
// 代码
func longestConsecutive(nums []int) int {
numMap := make(map[int]bool)
for _, number := range nums {
numMap[number] = true
}
longest := 0
for k, _ := range numMap {
if _, prs := numMap[k-1]; prs {
continue
}
currentLength := 1
for {
if _, prs1 := numMap[k+1]; !prs1 {
break
}
currentLength++
k++
}
longest = max(longest, currentLength)
}
return longest
}
func max(i, j int) int {
if i > j {
return i
}
return j
}