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

力扣 128. 最长连续序列

题目描述

在这里插入图片描述

我的思路

我的思路比较暴力,就是首先将数组从小到大进行排序,然后再依次遍历判断序列是否连续并时时更新连续序列的最长长度。比如示例1:nums = [100, 4, 200, 1, 3, 2],第一步先将数组进行排序得到sort_nums = [1, 2, 3, 4, 100, 200];第二步遍历的时候其实不用每个数都遍历,比如遍历1的时候发现1和后面的2,3,4是连续的,那么后续2,3,4就不用再遍历了,直接从100开始遍历;每遍历一个元素时记录以该元素开头的连续序列长度,实时更新前面所有连续序列的最长长度;最后输出最长长度。

这个思路是可以解决问题的,但是时间复杂度明显不符合题目要求,首先看排序的时间复杂度就超过O(n)了,后续遍历的时间复杂度为O(n^2),算法仍需进一步优化。

官方题解:哈希表

看了官方题解的哈希表解法,再对照我自己的暴力搜索思路,发现了2个关键的改进点。

1、利用哈希表搜索高效的优势,替代数组元素遍历(因为本质上是判断特定元素是否存在的问题)。

2、利用连续序列的性质来减少重复搜索的次数,比如发现从1开始的1,2,3,4的连续序列后,再看从2开始的连续序列时就可以直接跳过了,因为2的前一数1存在,因此以1开头的连续序列肯定比2开头的连续序列长。

经过这两点的优化,算法的复杂度就是搜索哈希表的复杂度,即O(n)。

该思路的代码如下

class Solution:def longestConsecutive(self, nums: List[int]) -> int:longest_streak = 0num_set = set(nums) # 转成集合,只留唯一元素即可for num in num_set:if num - 1 not in num_set: # 如果前一个元素并不存在,则作为序列的起始元素进行连续序列长度的计数current_num = numcurrent_streak = 1 while current_num + 1 in num_set: # 若下一个数字存在则连续序列长度进行更新current_num += 1current_streak += 1longest_streak = max(longest_streak, current_streak)return longest_streak

参考

力扣官方题解: 最长连续序列

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 深度学习加速秘籍:PyTorch torch.backends.cudnn 模块全解析
  • python办公自动化:初识`python-docx`
  • win10 新建、删除文件不会自动刷新的问题解决方案
  • 92.WEB渗透测试-信息收集-Google语法(6)
  • idea 2024.2切换到旧版的UI
  • CTF杂项题:easy_nbt writeup
  • 强!34.1K star! 再见Postman,新一代API测试利器,功能强大、颜值爆表!
  • C++ 内嵌 python 解释器
  • 【机器学习】AGI的基本概念、技术挑战和应用前景
  • ELK进阶-安全认证设置流程介绍
  • Kubernetes中如何对etcd进行备份和还原
  • springboot的启动流程原理
  • 各种JOIN的区别
  • C++操作excel,即使函数设置了不备份,但保存后,excel依然会自动生成备份文件的原因分析,及如何来禁止自动备份
  • Ps:首选项 - 文件处理
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • AWS实战 - 利用IAM对S3做访问控制
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • FastReport在线报表设计器工作原理
  • go语言学习初探(一)
  • HTTP中GET与POST的区别 99%的错误认识
  • java中的hashCode
  • php中curl和soap方式请求服务超时问题
  • Swift 中的尾递归和蹦床
  • SwizzleMethod 黑魔法
  • Travix是如何部署应用程序到Kubernetes上的
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 在Mac OS X上安装 Ruby运行环境
  • 带你开发类似Pokemon Go的AR游戏
  • 树莓派用上kodexplorer也能玩成私有网盘
  • #VERDI# 关于如何查看FSM状态机的方法
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (1)虚拟机的安装与使用,linux系统安装
  • (2)nginx 安装、启停
  • (Charles)如何抓取手机http的报文
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (二十三)Flask之高频面试点
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (算法)Travel Information Center
  • (贪心) LeetCode 45. 跳跃游戏 II
  • (转)ORM
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *Django中的Ajax 纯js的书写样式1
  • .NET 中使用 Mutex 进行跨越进程边界的同步
  • .NET单元测试
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .secret勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复
  • @NotNull、@NotEmpty 和 @NotBlank 区别
  • [<事务专题>]
  • [5] CUDA线程调用与存储器架构
  • [AutoSar]工程中的cpuload陷阱(三)测试
  • [AX]AX2012 SSRS报表Drill through action