给定一个无序的整数类型数组,求最长的连续元素序列的长度。
例如:
给出的数组为[1000, 4, 2000, 1, 3, 2],
最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长度:4
你需要给出时间复杂度在O(n)之内的算法
思路:用一个map存储数据,并且记录最小值和最大值,再遍历判断即可
package main
/**
*
* @param num int整型一维数组
* @return int整型
*/
func longestConsecutive( num []int ) int {
// write code here
if len(num) <= 0 {
return len(num)
}
min := num[0]
max := num[0]
mapNum := make(map[int]int)
mapNum[num[0]] = 1
for i := 1; i < len(num); i++ {
if num[i] < min {
min = num[i]
}
if num[i] > max {
max = num[i]
}
mapNum[num[i]] = 1
}
maxNum := 0
var tmp int
flag := false
for i := min; i <= max; i++ {
if _, ok := mapNum[i]; ok {
if flag {
tmp++
} else {
tmp = 1
}
flag = true
} else {
flag = false
}
if maxNum < tmp {
maxNum = tmp
}
}
return maxNum
}