美文网首页
最长连续序列

最长连续序列

作者: hustyanye | 来源:发表于2019-07-20 16:20 被阅读0次

    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
    

    相关文章

      网友评论

          本文标题:最长连续序列

          本文链接:https://www.haomeiwen.com/subject/dyjulctx.html