3.最长连续序列

目录

    • 问题链接:
    • 问题描述:
    • 实例:
    • 代码1:
    • 代码2:

问题链接:

最长连续序列

问题描述:

给定一个未排序的整数数组 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
示例 3:

输入:nums = [1,0,1,2]
输出:3

代码1:

解释:题目中说不考虑序列元素在原数组中是否连续,则可以直接把他转化为set集合形似,直接删除重复元素。
第一个数开始时,另y=x+1,判断y是否在集合中,假设在,便通过循环,不断地加一遍历,最后得到一个最大值,最大值减去第一个数,然后我们预设的值比较,选出最长的长度,进行返回。
当进行到第二个时,若发现他和前面一个数存在关系,则可以直接跳过本次循环,进行下一个数,减少时间浪费。

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        st=set(nums) #转为集合
        ans=0
        for x in st:#遍历哈希集合
            if x-1 in st:
                continue
            #x是序列的起点
            y=x+1
            while y in st: #不断查找下一个数是否在哈希集合中
                y+=1
            #循环结束后,y-1是最后一个在哈希集合中的数
            ans=max(ans,y-x) #从x到y-1 一共y-x个数
        return ans

代码2:

解释:这种做法很费时间,其实思想就是先转成集合(去除杂质)(集合是无序的,不能排序),在转成列表,进行排序。随后遍历,判断是否满足关系。

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        if len(nums) <= 1:
            return len(nums)
        st=set(nums) 
        st_d=list(st)
        st_d.sort()
        ans=1
        count=1
        i=1
        while i<len(st_d):
            if st_d[i]==st_d[i-1]+1:
                count+=1
                ans=max(count,ans)
            else:
                count=1
            i+=1
        return ans

你可能感兴趣的:(3.最长连续序列)