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

leetcode刷题记录(四十八)——128. 最长连续序列

(一)问题描述

128. 最长连续序列 - 力扣(LeetCode)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 <= nums.length <= 105 * -109 <= nums[i] <= 109icon-default.png?t=O83Ahttps://leetcode.cn/problems/longest-consecutive-sequence/description/?envType=study-plan-v2&envId=top-100-liked给定一个未排序的整数数组 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 <= nums.length <= 105
  • -109 <= nums[i] <= 109

 (二)解决思路

这道题目要求找连续序列,同时不要求序列位置连续,即查找数值大小上连续的元素有几个。那么使用哈希结构中的集合(Set)是最合适的:可以去除数组中重复的元素,又能快速找到符合条件的元素

思路很简单:

  • 找到序列的起始元素(即序列当中数值最小的元素)
  • 不断找到该序列中的下一个元素(比当前元素大一),每找到一个,序列长度就加一
  • 一个数组里可能包含多个序列,比较得到的多个长度取最大,就是当前数组中的最大连续序列长度。
class Solution {public int longestConsecutive(int[] nums) {//将给定数组转换为集合Set<Integer> s=new HashSet<>();for(int n : nums){s.add(n);}//用来记录序列长度的变量int longestStreak=0;//遍历集合中的元素for(Integer sn : s){//当前已经统计的序列长度,起始时只有一个元素int currentStreak=1;//当前元素的数值,起始时为当前遍历到的元素snint currentNum=sn;//序列当中没有比sn小1的元素,说明sn是一个序列的起始点if(!s.contains(sn-1)){   //只要有比sn大一的元素,就说明序列还没有结束,不断找序列中的下一个元素,同时序列长度加一while(s.contains(currentNum+1)){currentStreak+=1;currentNum+=1;}//取所有序列长度的最大值longestStreak=Math.max(longestStreak,currentStreak);}}return longestStreak;}
}

 (三)易错点

        这道题要求时间复杂度为O(n),那么就不能有排序,只要针对数组排序,时间复杂度就会大于O(n)。所以这道题解题的关键是想到找序列的起点,以及怎么找序列的节点。如果不找序列的起点,是没有办法按顺序累加元素的。

        另外也不是循环嵌套,时间复杂度就一定大于O(n)的哈。像这道题里面第二层循环的执行是有条件的,时间复杂度还是O(n)。

http://www.lryc.cn/news/521685.html

相关文章:

  • HTML中如何保留字符串的空白符和换行符号的效果
  • Linux入门——环境基础开发(上)
  • c++类和对象---下
  • 组件中的Props
  • 并行服务、远程SSH无法下载conda,报错404
  • 迅为RK3568开发板篇OpenHarmony配置HDF驱动控制LED-新增 topeet子系统-编写 bundle.json文件
  • 深度剖析RabbitMQ:从基础组件到管理页面详解
  • usb通过hdc连接鸿蒙next的常用指令
  • 【落羽的落羽 C语言篇】文件操作
  • RNN之:LSTM 长短期记忆模型-结构-理论详解-及实战(Matlab向)
  • 战略与规划方法——深入解析波士顿矩阵(BCG Matrix):分析产品组合的关键工具
  • 【记录52】el-table-column 添加fixed属性 滚动条无法滑动
  • 晨辉面试抽签和评分管理系统之十:如何搭建自己的数据库服务器,使用本软件的网络版
  • 主链和Layer2之间资产转移
  • 麒麟操作系统服务架构保姆级教程(十)rewrite跳转
  • MySQL表的创建实验
  • 【高可用自动化体系】自动化体系
  • 总结SpringBoot项目中读取resource目录下的文件多种方法
  • Java-KMP字符串匹配算法
  • Vue3使用vue-count-to数字滚动模块报错解决方案
  • 【高阶数据结构】线段树加乘(维护序列)详细解释乘与加懒标记
  • replaceState和vue的router.replace删除query参数的区别
  • [USACO14JAN] Ski Course Rating G
  • 初步认识 Neo4j 图数据库
  • Qt中容器 QVector、QList、QSet和QMap 性能与用途比较
  • ASP.NET Core - 依赖注入(四)
  • 数学用语中 up to 的含义
  • Spring Boot + MyBatis-Flex 配置 ProxySQL 的完整指南
  • WEB攻防-通用漏洞_XSS跨站_权限维持_捆绑钓鱼_浏览器漏洞
  • 人工智能任务20-利用LSTM和Attention机制相结合模型在交通流量预测中的应用