LeetCode 128.最长连续序列
问题描述
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
思路
- 使用map,将数组元素存入map中,目的是去重
- 遍历map,当前元素为num
- 寻找那些断点元素(可以作为起点) ,即 num没有num-1的情况
- 这时从num开始循环找num+1,记录次数,通过比较找出最大长度。时间和空间复杂度都是O(n)
代码
func longestConsecutive(nums []int) int {
mapNums := map[int]bool{}
// 将数组元素去重,转存到map中
for _, value := range nums {
mapNums[value] = true
}
var longestSequence int
for num, _ := range mapNums {
// 寻找断点位置,因为断点位置可以作为起点
if !mapNums[num - 1] {
temp := num
tempLength := 1
// 从断点位置遍历, 寻找最长值
for mapNums[temp + 1] {
temp++
tempLength++
}
longestSequence = max(longestSequence, tempLength)
}
}
return longestSequence
}
func max(a, b int) int {
if a < b {
a = b
}
return a
}