力扣hot100第三题:最长连续序列python

第一部分:题目要求

给定一个未排序的整数数组 nums ,找出**数字连续的最长序列(**不要求序列元素在原数组中连续)的长度

请你设计并实现时间复杂度为 O(n)的算法解决此问题。

示例 1:

复制代码
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

复制代码
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

示例 3:

复制代码
输入:nums = [1,0,1,2]
输出:3

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

第二部分:代码实现

(1)去重(利用集合特性)

复制代码
#第一步:去重
nums_set=set(nums)
  • 核心操作nums_set = set(nums)
  • 作用 :将原始列表 nums 转换为集合(set),利用集合「元素唯一性」的特性,自动剔除列表中的重复整数,避免重复元素对后续连续序列判断造成干扰(比如若列表有重复的2,去重后仅保留一个,不影响连续序列长度计算)。

(2)重新排序(从小到大)

复制代码
#第二步:重新排序(从小到大)
nums_set_sort=sorted(nums_set)
  • 核心操作nums_set_sort = sorted(nums_set)
  • 作用 :使用 sorted() 函数对去重后的集合进行升序排序,得到一个有序的列表。只有将元素按从小到大排列,才能方便后续依次判断相邻元素是否为连续整数(即后一个元素是否等于前一个元素 + 1)。

(3)计数(统计最长连续整数序列长度)

复制代码
#第三步:计数
max_count = 1
now_count=1#考虑到有多组连续数,需要比较大小
if len(nums_set_sort)==0:
    print(0)
else:
    now=nums_set_sort[0]
    for i in range(1,len(nums_set_sort)):
        if nums_set_sort[i]==now+1:# 代表连续
            now_count+=1
            now=nums_set_sort[i]

        else:
            if(now_count>=max_count):
                max_count=now_count
            now_count=1#重置
            now=nums_set_sort[i]
        if (now_count >= max_count):#确保max_count(如果给的是连续的12345,那么到5的时候,now_count=5,max_count=1,没有机会走上面的那个else分支)
            max_count = now_count
    print(max_count)
  • 核心操作 :通过循环遍历有序列表,对比相邻元素,维护两个计数变量(max_countnow_count)完成统计。
  • 作用 :这是核心业务逻辑步骤,负责计算最长连续整数序列的长度,具体细分 3 个小逻辑:
    1. 变量初始化max_count(记录全局最长长度,初始为 1,因为至少有 1 个元素)、now_count(记录当前连续序列长度,初始为 1)、now(记录当前基准元素,初始为有序列表第一个元素);
    2. 循环判断 :从列表第二个元素开始遍历,若当前元素等于「基准元素 + 1」,说明连续,当前计数now_count加 1,并更新基准元素;若不连续,就用当前计数更新全局最长计数,再重置当前计数和基准元素;
    3. 边界兜底 :额外添加一次now_count >= max_count的判断,避免出现「列表末尾是最长连续序列」(无法进入else分支更新max_count)的情况,保证统计结果准确。

(4)完整提交代码

复制代码
class Solution:
    def longestConsecutive(self, nums: List[int]) -> int:
        #第一步:去重
        nums_set=set(nums)
        #第二步:重新排序(从小到大)
        nums_set_sort=sorted(nums_set)
        #第三步:计数
        max_count = 1
        now_count=1#考虑到有多组连续数,需要比较大小
        if len(nums_set_sort)==0:
            return 0
        else:
            now=nums_set_sort[0]
            for i in range(1,len(nums_set_sort)):
                if nums_set_sort[i]==now+1:# 代表连续
                    now_count+=1
                    now=nums_set_sort[i]

                else:
                    if(now_count>=max_count):
                        max_count=now_count
                    now_count=1#重置
                    now=nums_set_sort[i]
                if (now_count >= max_count):#确保max_count(如果给的是连续的12345,那么到5的时候,now_count=5,max_count=1,没有机会走上面的那个else分支)
                    max_count = now_count
            return max_count

(5)pycharm版本

复制代码
nums = [100,4,200,1,3,2]
#第一步:去重
nums_set=set(nums)
#第二步:重新排序(从小到大)
nums_set_sort=sorted(nums_set)
#第三步:计数
max_count = 1
now_count=1#考虑到有多组连续数,需要比较大小
if len(nums_set_sort)==0:
    print(0)
else:
    now=nums_set_sort[0]
    for i in range(1,len(nums_set_sort)):
        if nums_set_sort[i]==now+1:# 代表连续
            now_count+=1
            now=nums_set_sort[i]

        else:
            if(now_count>=max_count):
                max_count=now_count
            now_count=1#重置
            now=nums_set_sort[i]
        if (now_count >= max_count):#确保max_count(如果给的是连续的12345,那么到5的时候,now_count=5,max_count=1,没有机会走上面的那个else分支)
            max_count = now_count
    print(max_count)
相关推荐
小李子呢021110 分钟前
前端八股6---v-model双向绑定
前端·javascript·算法
He少年25 分钟前
【基础知识、Skill、Rules和MCP案例介绍】
java·前端·python
AI_Claude_code28 分钟前
ZLibrary访问困境方案四:利用Cloudflare Workers等边缘计算实现访问
javascript·人工智能·爬虫·python·网络爬虫·边缘计算·爬山算法
jedi-knight1 小时前
AGI时代下的青年教师与学术民主化
人工智能·python·agi
迷藏4941 小时前
**eBPF实战进阶:从零构建网络流量监控与过滤系统**在现代云原生架构中,**网络可观测性**和**安全隔离**已成为
java·网络·python·云原生·架构
迷藏4941 小时前
**发散创新:基于Solid协议的Web3.0去中心化身份认证系统实战解析**在Web3.
java·python·web3·去中心化·区块链
2301_822703201 小时前
Flutter 框架跨平台鸿蒙开发 - 创意声音合成器应用
算法·flutter·华为·harmonyos·鸿蒙
cmpxr_1 小时前
【C】数组名、函数名的特殊
c语言·算法
weixin_156241575761 小时前
基于YOLOv8深度学习花卉识别系统摄像头实时图片文件夹多图片等另有其他的识别系统可二开
大数据·人工智能·python·深度学习·yolo
AI_Claude_code1 小时前
ZLibrary访问困境方案三:Web代理与轻量级转发服务的搭建与优化
爬虫·python·web安全·搜索引擎·网络安全·web3·httpx