当前位置: 首页 > news >正文

LeetCode hot100:128 最长连续序列:高效求解

问题描述:

给定一个未排序的整数数组 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
解释:最长连续序列是 [0,1,2,3,4,5,6,7,8],长度为 9。

示例3:

输入:nums = [1,0,1,2]
输出:3
解释:最长连续序列是 [0,1,2],长度为 3。

解决方法:

方法一:排序法

class Solution:def longestConsecutive(self, nums: List[int]) -> int:if not nums:return 0# 对数组进行排序nums.sort()longest_streak = 1  #初始化最长长度为1current_streak = 1  #初始化当前长度为1# 遍历排序后的数组for i in range(1, len(nums)):# 如果当前数字与前一个数字连续if nums[i] == nums[i - 1] + 1:current_streak += 1# 如果当前数字与前一个数字相同,跳过elif nums[i] == nums[i - 1]:continue# 如果序列中断,重置当前序列长度else:longest_streak = max(longest_streak, current_streak)current_streak = 1return max(longest_streak, current_streak)

复杂度分析:

  • 时间复杂度:O(n log n) 
  • 空间复杂度:O(1)或O(n) 取决于排序算法是否需要额外空间

方法二:哈希表

class Solution:def longestConsecutive(self, nums: List[int]) -> int:longset = 0 # 最大长度num_set = set(nums) #哈希表存储,去重for num in num_set: if num-1 not in num_set: #检查是否是序列起点currentnum = numcurrentlen = 1while currentnum + 1 in num_set:  #向后扩展序列currentnum += 1currentlen += 1longset = max(longset,currentlen) #更新最大值return longset    

复杂度分析:

  • 时间复杂度:O(n) 数组元素被访问常数次
  • 空间复杂度:O(n) 用于存储哈希集合

问题详解:

核心思想:利用哈希集合实现快速查找,只从每个连续序列的起点开始统计长度,避免重复计算。

执行流程:示例 nums = [100,4,200,1,3,2]

  • 创建集合:{ 1,2,3,4,100,200}
  • 遍历集合:数字1 -> 0不在集合中 -> 是起点 -> 依次找到2,3,4 -> 总长度是4;

                         数字2 -> 1在集合中 -> 不是起点 -> 跳过

                         数字3 -> 2在集合中 -> 不是起点 -> 跳过

                         数字4 -> 3在集合中 -> 不是起点 -> 跳过

                         数字100 -> 99不在集合中 -> 是起点 -> 只有100 -> 总长度是1

                         数字200 -> 199不在集合中 -> 是起点 -> 只有200 -> 总长度是1

  • 返回最大值:4

总结:

技巧:空间换时间:使用哈希集合实现 O(1) 查找;起点判断:只从序列起点开始统计,避免重复计算;向后扩展:从起点连续向后查找,统计序列长度。

最长连续序列问题是理解哈希表优化时间复杂度分析的经典案例。

http://www.dtcms.com/a/481812.html

相关文章:

  • 上海网站制作 优化wordpress 去除google
  • [Backstage] 软件模板Scaffolder | 定义“Node.js微服务“
  • 链表操作教学工具
  • 珠海市网站建设的公司网站安全维护
  • PC端AI推理存储IO流量剖析
  • 如何在AutoCAD中管理GIS属性表?
  • 消防模块-图形识别快速匹配
  • 备案网站名怎么写前端微信小程序开发
  • 使用Spring Boot构建多维度配置层
  • vps 可以做多个网站吗沈阳营销网站建设
  • 上传文件相关业务,采用策略模式+模版方法模式进行动态解耦
  • Unity3d中Tab控件的实现
  • 桥梁主动防撞预警系统方案
  • 【node】运行windows7下的高版本node.js
  • 解密NLP:从入门到精通
  • 如何说课网站建设当地公交建设公司的官网
  • 哪里有网站开发服务器西安关键词排名提升
  • npx 与 npm 区别
  • diffusion model(0.5) score-SDE 关于score function与noise的关系
  • leetcode724 寻找数组的中心下标
  • AI用户洞察新纪元:atypica.AI如何重塑商业决策逻辑
  • 彻底解决 Zip4j 解压中文文件名乱码问题(含混合编码与 Mac 特殊情况)
  • 河北农业网站建设公司凡科互动官网登录
  • 企业网站建设的成本构成吉林市网站建设招标
  • git push 报错 push rejected (一文读懂并解决)
  • 从缓存到分库分表:MySQL 高并发海量数据解决方案全解析
  • 苍穹外卖-缓存套餐 Spring Cache day07
  • 垂直电商网站建设方案wordpress主题开发时间
  • 报告工具更新!Word附注一键期末转期初
  • 优化A7M4相机直播图像传输:避免质量损失,实现端到端高保真