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%的用户