Leetcode 128. 最长连续序列 ---- python

1. 题目描述

给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。

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

2. 解题思路

题目要求算法时间复杂度为 O(n),所以不能排序,因为排序算法的时间复杂度至少为 O(nlogn).
然后想到用字典。
第一步,set去重,重复的数字不能构成连续的序列
第二步,用字典存储左右两端对应连续区间的长度。为什么记录左右两端??中间不需要记录?因为中间的值已经判断过了,只需在左右两端记录连续序列的长度。

如果思路很难看懂,就自己把 [100, 4, 200, 1, 3, 2]例子放进代码里手算一遍,用笔在纸上画一画,很容易明白的。

3. 代码实现

class Solution:
    def longestConsecutive(self, nums) -> int:
        setNums = set(nums)
        hash_dict = {}
        maxLength = 0
        for num in setNums:
            if(num not in hash_dict):
                left = hash_dict.get(num - 1, 0)
                right = hash_dict.get(num + 1, 0)
                curLength = 1 + left + right
                maxLength   = max(curLength,maxLength)
                hash_dict[num] = curLength
                hash_dict[num-left]  = curLength
                hash_dict[num + right] = curLength
        return maxLength

在这里插入图片描述

发布了77 篇原创文章 · 获赞 9 · 访问量 6753

猜你喜欢

转载自blog.csdn.net/u013075024/article/details/94599205