LeetCode刷题之路 最长连续序列

最长连续序列【困难】

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 O(n)

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

解题思路

首先进行set处理,去掉重复的元素,然后在进行排序。定义两个变量n和maxn,分别存储本次连续长度和所有的最大连续长度。对列表进行遍历,得到当前连续长度,和最大连续长度进行比较,并根据条件替换最大连续长度的值,最后返回最大连续长度。下面是这道题的代码:

class Solution:
    def longestConsecutive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if nums == []:
            return 0
        nums = list(set(nums))
        nums.sort()
        n = 1
        maxn = 1
        for i in range(0,len(nums)-1):
            if nums[i+1] - nums[i] == 1:
                n = n + 1
            else:
                if n > maxn:
                    maxn = n
                n = 1
        if n > maxn:
            maxn = n
        return maxn

另一种方法

下面这个方法没用到排序,只是去重,然后判断集合里是否含有这个数字,从而得出连续的序列的长度,最终的到最长连续序列返回。下面是代码:

class Solution:
    def longestConsecutive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums = set(nums)
        maxn = 0
        for i in nums:
            if i - 1 not in nums:
                n = i +1
                while n in nums:
                    n = n + 1
                maxn = max(maxn, n - i)
        return maxn

推荐阅读更多精彩内容