给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
js示例输入: nums = [100,4,200,1,3,2] 输出: 4 解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。 示例 2: 输入: nums = [0,3,7,2,5,8,4,6,0,1] 输出: 9 示例 3: 输入: nums = [1,0,1,2] 输出: 3
golangfunc longestConsecutive(nums []int) int {
if len(nums) == 0 {
return 0
}
// 1. 用 map 模拟 HashSet
set := make(map[int]bool)
for _, num := range nums {
set[num] = true
}
longest := 0
// 2. 遍历每个数
for num := range set {
// 3. 只有当 num-1 不存在,才作为起点
if !set[num-1] {
currentNum := num
currentLen := 1
// 4. 向后扩展
for set[currentNum+1] {
currentNum++
currentLen++
}
// 5. 更新最大长度
if currentLen > longest {
longest = currentLen
}
}
}
return longest
}
本文作者:曹子昂
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!