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 := 0for k, _ := range numMap {if _, prs := numMap[k-1]; prs {continue}currentLength := 1for {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
}