【算法】最长连续序列

题目:最长连续序列

给定一个未排序的整数数组 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

我们做算法题的时候,一定先审好题:题目要求找出数字连续的最长序列(不要求序列元素在原数组中的连续)的长度。
其中的关键点是不要求在原数组的连续,所以我们可以进行先进行去重和排序

解题思路:

这道题的关键点在于如何识别并统计出最长的连续数字序列。我们可以采用以下步骤来解决问题:

  1. 去重与排序:首先,我们需要去除数组中的重复元素并对其进行排序。这是因为连续序列的元素在排序后会相邻,且去重可以避免重复计算同一个数字。(先用new Set去重,再用sort进行排序)
  2. 遍历排序后的数组:然后,遍历排序后的数组,逐个检查每个数字是否可以延伸出一个更长的连续序列,这里的关键思路是,从数组中的第二个值开始遍历,对于当前的数字,如果前一个数字与当前数字相差为1,说明是连续的。就把它加入到当前的连续序列中;否则,它就作为新序列的起始点。
  3. 记录最长序列长度:在遍历过程中,不断更新最长序列的长度。并在遍历结束后返回这个长度。

JavaScript实现:

/**
 * @param {number[]} nums
 * @return {number}
 */
var longestConsecutive = function (nums) {
    // 先判断是否为一个空数组,如果是,就返回0
    if (nums.length === 0) return 0;
    // 先去重,再排序,然后得到一个每个数字具有唯一性的数组
    let uniqueNums = Array.from(new Set(nums)).sort((a, b) => a - b)
    // 接着声明最长数字连续序列长度为1,然后需要声明一个存储当前长度的变量,初始化值为1
    let maxLength = currentLength = 1;
    // 数组经过去重排序之后,接着进行遍历数组,如果数组当前值与前一个值相差为1,说明是连续的,当前长度加currentLength加1。
    // 如果不相等,则重新比较maxLength与currentLength值,最大的赋值给maxLength,currentLength则重新开始从1算起。
    for (let i = 1; i < uniqueNums.length; i++) {
        if (uniqueNums[i] === uniqueNums[i - 1] + 1) {
            currentLength++; // 如果数组当前值与前一个值相差为1,说明是连续的,当前长度加currentLength加1
        } else {
            // 如果不相等,则重新比较maxLength与currentLength值,最大的赋值给maxLength,currentLength则重新开始从1算起。
            maxLength = Math.max(maxLength, currentLength);
            currentLength = 1;
        }
    }
    // 最后再比较一下最大长度值和当前长度值,得出最后的最大长度。为什么最后再比较一下呢,
    // 因为在上面的循环中,只有在else中maxLength才会进行更新,如果是一直在if中,maxLength就不会进行更新,所以最后需要重新比较一下。
    maxLength = Math.max(maxLength, currentLength);
    return maxLength;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/767034.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PTrade如何获取技术值班?如get_RSI - 相对强弱指标;PTrade量化软件如何获取?

get_RSI - 相对强弱指标 get_RSI(close, n6) 使用场景 该函数仅在回测、交易模块可用 接口说明 获取相对强弱指标RSI指标的计算结果 PTrade是恒生公司开发的一款专业量化软件&#xff0c;部分合作券商可提供&#xff0c;↑↑↑&#xff01; 参数 close&#xff1a;价格…

C语言的数据结构:图的基本概念

前言 之前学过了其它的数据结构&#xff0c;如&#xff1a; 集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。 线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个&#xff0c;如线性表、栈、队列&#xff0c;每一个节点和其它节点之间的关系 一个对一个…

rpm包下载

内网无法下载、选择外网的一台机器下载rpm包 下载后上传rpm包 1、创建下载目录 mkdir /data/asap/test 2、下载能留存包的工具 sudo yum install yum-utils -y 报错就是环境问题没下载成功&#xff0c;我换了个环境正常的机器就可以了 3、下载rpm包到指定目录/data/asa…

一文彻底搞懂Transformer - Input(输入)

一、输入嵌入&#xff08;Input Embedding&#xff09; 词嵌入&#xff08;Word Embedding&#xff09;&#xff1a;词嵌入是最基本的嵌入形式&#xff0c;它将词汇表中的每个单词映射到一个固定大小的向量上。这个向量通常是通过训练得到的&#xff0c;能够捕捉单词之间的语义…

GAMES104:04游戏引擎中的渲染系统1:游戏渲染基础-学习笔记

文章目录 概览&#xff1a;游戏引擎中的渲染系统四个课时概览 一&#xff0c;渲染管线流程二&#xff0c;了解GPUSIMD 和 SIMTGPU 架构CPU到GPU的数据传输GPU性能限制 三&#xff0c;可见性Renderable可渲染对象提高渲染效率Visibility Culling 可见性裁剪 四&#xff0c;纹理压…

如何在《中小学电教》期刊上发表论文?

如何在《中小学电教》期刊上发表论文&#xff1f; 《中小学电教》知网 学术期刊 教育厅25年下半年 3版 ①其他学科 不收甘肃和幼儿园 ②数学、英语、历史、政治&#xff08;道德与法治&#xff09;、音体美、科学学科的稿件 全bao 全bao不带课题 文章需要和信息…

【TS】TypeScript 原始数据类型深度解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 TypeScript 原始数据类型深度解析一、引言二、基础原始数据类型2.1 boolean2.2 …

数据治理体系建设方案

数据治理体系建设方案 在当前的大数据时代&#xff0c;数据已经成为企业核心资产之一&#xff0c;其管理与治理的重要性愈加凸显。有效的数据治理体系不仅能提升数据质量和数据使用的效率&#xff0c;还能为企业创造更多的商业价值。本文将详细阐述数据治理的重要性、核心要素…

SpringBoot 如何处理跨域请求?你说的出几种方法?

引言&#xff1a;在现代的Web开发中&#xff0c;跨域请求&#xff08;Cross-Origin Resource Sharing&#xff0c;CORS&#xff09;是一个常见的挑战。随着前后端分离架构的流行&#xff0c;前端应用通常运行在一个与后端 API 不同的域名或端口上&#xff0c;这就导致了浏览器的…

AI生成电商模特图应用定制

&#x1f31f; 广州AI生成电商模特图应用定制案例剖析— 触站AI&#xff0c;绘制智能图像的未来 &#x1f680; &#x1f3a8; 触站AI&#xff0c;让创意与智能共绘辉煌 &#x1f3a8;在这座充满创新活力的广州城&#xff0c;触站AI以其尖端AI技术&#xff0c;开启了企业AI图像…

动态代理--通俗易懂

程序为什么需要代理&#xff1f;代理长什么样&#xff1f; 例子 梳理 代理对象(接口)&#xff1a;要包含被代理的对象的方法 ---Star 被代理对象&#xff1a;要实现代理对象(接口) ---SuperStar 代理工具类&#xff1a;创建一个代理&#xff0c;返回值用代理对象&#xff0c…

yolov5实例分割跑通以及C#读取yolov5_Seg实例分割转换onnx进行检测部署

一、首先需要训练yolov5_seg的模型&#xff0c;可以去网上学习&#xff0c;或者你直接用我的&#xff0c; 训练环境和yolov5—7.0的环境一样&#xff0c;你可以直接拷过来用。 yolov5_seg算法 链接&#xff1a;https://pan.baidu.com/s/1m-3lFWRHwg5t8MmIOKm4FA 提取码&…

Zombie Voices Audio Pack(僵尸游戏音频包)

僵尸声音音频包是600多个高质量声波的集合。 它提供了僵尸主题游戏所需的一切&#xff0c;这要归功于它的20多个类别&#xff1a; 攻击、咬、呼吸、窒息、损坏、死亡、进食、血腥、咕噜、大笑、疼痛、反应、尖叫、喉咙、呕吐、单词和句子。 我们的僵尸动画包带来的额外奖励&am…

自从棋牌游戏有了AI助阵,赢“麻”了!看这篇就够了

毛主席曾经说过&#xff1a;“中国对世界的三大贡献&#xff0c;第一是中医&#xff0c;第二是曹雪芹的《红楼梦》&#xff0c;第三是麻将牌。”麻将起源于中国&#xff0c;是国粹。各地的麻将玩法各不相同&#xff0c;比如云贵川地区的“缺一门”打法&#xff0c;广东麻将流行…

【课程设计】基于python的一款简单的计算器

我们是大二本科生团队&#xff0c;主力两人耗时3天完成了这款计算器的制作。希望大家给我们多多引流&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 欢迎各位优秀的高考学子报考长安大学&#xff0c;报考长安大学电子信息工程专业。 欢迎有志于就…

vite项目如何在本地启动https协议

vite项目如何在本地启动https协议 本地启动正常配置在vite.config.js文件中默认启动http协议的请求&#xff0c;如何改成https呢&#xff1f;今天的开发中遇到了这个问题项目需求&#xff1a; 本地启动https协议的前端页面并且正常访问后台https协议的接口 解决方法&#xff1a…

python学习-tuple及str

为什么需要元组 定义元组 元组的相关操作 元组的相关操作 - 注意事项 元组的特点 字符串 字符串的下标&#xff08;索引&#xff09; 同元组一样&#xff0c;字符串是一个&#xff1a;无法修改的数据容器。 如果必须要修改字符串&#xff0c;只能得到一个新的字符串&#xff…

如何对GD32 MCU进行加密?

GD32 MCU有哪些加密方法呢&#xff1f;大家在平时项目开发的过程中&#xff0c;最后都可能会面临如何对出厂产品的MCU代码进行加密&#xff0c;避免产品流向市场被别人读取复制。 下面为大家介绍GD32 MCU所支持的几种常用的加密方法&#xff1a; 首先GD32 MCU本身支持防硬开盖…

信息学一周赛事安排

本周比赛提醒 本周末有以下几场比赛即将开始&#xff1a; :::block-1 1.ABC-361 比赛时间&#xff1a;7月6日&#xff08;周六&#xff09;晚20:00 比赛链接&#xff1a;https://atcoder.jp/contests/abc361 3.CF-956(Div.2) 比赛时间&#xff1a;7月7日&#xff08;周日…

【日常记录】【JS】获取用户IP地址及其他信息

1. 查询本机的IP地址 1.1 通过命令提示符 电脑按下 ctrl r &#xff0c;输入 cmd 后按回车&#xff0c;打开命令提示符窗口输入命令&#xff1a; ipconfig &#xff0c;然后按回车 下面这个红色框里面就是 ip地址 在输出结果中找到“无线局域网适配器 WLAN”或“以太网适配器…
最新文章