128. 最长连续序列
最长连续序列
题目描述:
给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
进阶:你可以设计并实现时间复杂度为 O(n) 的解决方案吗?
示例 1:
输入: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
提示:
0 <= nums.length <= 104
-109 <= nums[i] <= 109
思路:
先去重,创造一个map把列表中的数子放进去,把重复数字去掉,再遍历这个map,如果他的num-1==false,说明num-1这个数不在列表里面,是一个根结点,再从这个数开始遍历,每次加一判断这个数在不在map里面。
if !flag[k-1]{
如果把上面这句代码改成true,就遍历到根节点上面一个结点开始找相邻的结点,时间会大大增加,开始没理解算法写错了,时间到1144ms 。
代码:
func longestConsecutive(nums []int) int {
if len(nums)==0{
return 0
}
flag := map[int]bool{}
for _,v :=range nums{
flag[v] =true
}
length,max :=0,1
for k := range flag{
if !flag[k-1]{
length++
for flag[k+1]==true{
length++
k++
}
if length>max{
max =length
}
length=0
}
}
return max
}
代码效率:
执行用时:4 ms, 在所有 Go 提交中击败了96.13%的用户
内存消耗:3.5 MB, 在所有 Go 提交中击败了66.77%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!