LeetCode 128.最长连续序列 Python题解

leetcode 128题 最长连续序列

分享解题思路,使用哈希表算法

🔹题目
给定一个未排序的整数数组nums,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度
🔹设计时间复杂度为O(n)的算法解决问题
🔹示例1
给定数组[100,4,200,1,3,2],最长的连续序列是 [1,2,3,4],最长序列长度为4。

🔸解题思路
1.创建一个 Set数据结构numsSet
set可以去重避免排序时有重复数字出现
将元素复制一份去重的序列加入numSet

2.初始化最长连续序列长度maxLength=0
初始化当前连续序列长度length=1

3.遍历数组中每个元素
对于当前元素num,num-1是否在numSet
**如果存在,说明num不是连续序列起点,跳过不处理,因为在遍历到处理num-1时num会被遍历,不必重复处理
**如果不存在,说明没有比num小的数,num是连续序列的起点,继续向后遍历元素,并不断更新长度最大值

4. num+1 是否存在,即下一个连续数宇是否在numSet 中。
**如果存在,说明连续序列还未结束,
num+1,length +1,继续向后遍历。
**如果下一个连续数字不在numSet 中,说明当前连续序列结束,当前的length 与当前的maxLength 进行比较,取较大值并更新maxLength.

完成遍历后,返回最长连续序列长度
maxLength


数组&哈希经典题型:
217/242/1/49/347/349/238/36/128


✨Python缩进很重要 严格遵循PEP8规则

复制代码
class Solution:
    def longestConsecutive(self, nums) -> int:
        numsSet = set(nums)
        maxLength = 0
        for num in numsSet:
            if num - 1 in numsSet:
                continue
            length = 1
            while num + 1 in numsSet:
                num += 1
                length += 1
            maxLength = max(length, maxLength)
        return maxLength


if __name__ == '__main__':
    nums1 = [100, 4, 200, 1, 3, 2]
    nums = [0, 3, 7, 2, 5, 8, 4, 6, 0, 1]
    a = Solution()
    print(a.longestConsecutive(nums))
复制代码

 

 

 



posted @   陈晓猛  阅读(317)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2019-03-10 编写好的测试用例
点击右上角即可分享
微信分享提示