leetcode-128-最长连续序列

题目描述:

 

 方法一:集合 O(N)

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int: 
        nums = set(nums)
        res = 0
        for num in nums:
            if num-1 not in nums:
                tmp = 1
                while num+1 in nums:
                    num += 1
                    tmp += 1
                res = max(res,tmp)
        return res
                    

方法二:哈希表 O(N)

class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        lookup = {}
        res = 0
        for num in nums:
            if num not in lookup:
                # 判断左右是否可以连起来
                left = lookup[num - 1] if num - 1 in lookup else 0
                right = lookup[num + 1] if num + 1 in lookup else 0
                # 记录长度
                lookup[num] = left + right + 1
                # 把头尾都设置为最长长度
                lookup[num - left] = left + right + 1
                lookup[num + right] = left + right + 1
                res = max(res, left + right + 1)
        return res

 

posted @ 2019-10-11 15:21  oldby  阅读(172)  评论(0编辑  收藏  举报