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

最长连续序列

继续给大家带来每日一题

题目描述:

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

题目示例:
在这里插入图片描述

这道题目其实也不难,给大家分享的目的也只想分享一个思路,对于这种找连续的型的题目,起点是比较难确定的,如题目给的case:

nums = [100,4,200,1,3,2]

我们遍历到100的时候,我们要找下一个元素,但是下一个元素有可能是100+1,也有可能是100-1,这个时候就很难确定我们的走向是如何,现在我们有两种思路,但其本质都是确定从起点开始还是从终点开始

  • 1.对数组排序,这样我们从头到尾去遍历,只需要确定相邻元素的作差是否为1就可以判断是否是连续的,但是无论用什么排序算法其时间复杂度均会大于0(n)
  • 2.直接判断当前元素是否为起点
    • 100,前一个元素为99,数组无99,所以100是起点,100的下一个元素101,数组没有,所以以100为起点的连续数组长度是1
    • 4,前一个元素:3,数组有3,所以4不是起点,直接跳过
    • 200.前一个元素:199,数组无199,所以200是起点,200的下一个元素201,数组没有,所以以100为起点的连续数组长度是1
    • 1,前一个元素:0,数组无0,所以1是起点,1的下一个元素2,数组有,2的下一个元素3,数组有,3的下一个元素4,数组也有,4的下一个元素5,数组没有,所以以1为起点的连续数组长度是4
    • 3,前一个元素:2,数组有2,所以3不是起点,直接跳过
    • 2,前一个元素:1,数组有1,所以2不是起点,直接跳过

所以最大长度为4,知道了这个逻辑我们代码就很好实现了

    public static int longestConsecutive(int[] nums) {int max = 0;int n = nums.length;Set<Integer> set = new HashSet<>(n);for (int i : nums) {set.add(i);}for (int i : set) {if (!set.contains(i - 1)) {//说明是开头,依此去找符合+1的值int len = 1;int cuNum = i;while (set.contains(cuNum + 1)) {len++;cuNum++;}max = Math.max(len, max);}}return max;}

相关文章:

  • Kafka 单机部署启动教程(适用于 Spark + Hadoop 环境)
  • UE接口通信
  • 四款主流物联网操作系统(FreeRTOS、LiteOS、RT-Thread、AliOS)的综合对比分析
  • 常见排序算法详解与C语言实现
  • LINUX_LCD编程 TFT LCD
  • 数据结构 [一] 基本概念
  • 【网络安全】fastjson原生链分析
  • Axure高保真LayUI框架 V2.6.8元件库
  • Python基础:文件简单操作
  • StringRedisTemplete使用
  • 网络安全中网络诈骗的攻防博弈
  • Pluto论文阅读笔记
  • RabbitMQ 开机启动配置教程
  • 各个布局的区别以及示例
  • Python 中 Django 中间件:原理、方法与实战应用
  • [论文阅读]PPT: Backdoor Attacks on Pre-trained Models via Poisoned Prompt Tuning
  • STP-生成树
  • 第四十二天打卡
  • MCP客户端Client开发流程
  • PyTorch——优化器(9)
  • 深圳宝安沙井网站建设/中国网络营销公司
  • 最便宜的网站建设公司/关键词优化排名公司
  • 万网域名管理网站/宣传方式有哪些
  • 做网站好的公司/如何查看百度搜索指数
  • 个人网页设计模板图片手机版/廊坊百度提升优化
  • 视频制作软件有哪些/新乡seo推广