最长连续序列

https://leetcode-cn.com/explore/interview/card/bytedance/243/array-and-sorting/1019/

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

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

示例:

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

因为要O(n)的算法,这里我先用1个dict保存每个数字是否出现,出现则置位1
在遍历的时候,循环到某个数时,直接往前后各自搜索他的最长的字串,并且把搜索过的位置置位0,这个过程结束后更新最大的长度。代码如下:

class Solution(object):
    def longestConsecutive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums_dict = {}
        # 建立字典用于查找
        for i in nums:
            nums_dict [i] = 1
        max_len = 0
        for i in nums:
            if nums_dict[i]!=0: 
                # 如果等于0 说明被找过了
                nums_dict[i] = 0
                tmp_len = 1
                # 往前找连续数字
                tmp_pre = i-1
                while tmp_pre in nums_dict:
                    tmp_len +=1
                    nums_dict[tmp_pre] = 0
                    tmp_pre -= 1
                # 往后找连续数字
                tmp_after = i+1
                while tmp_after in nums_dict:
                    tmp_len += 1
                    nums_dict[tmp_after] = 0
                    tmp_after += 1
                max_len = max(max_len,tmp_len)
        return max_len

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