首页 > 其他分享 >128. 最长连续序列(中)

128. 最长连续序列(中)

时间:2024-10-22 17:00:27浏览次数:6  
标签:nums max 序列 let 连续 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

法一、桶排思想---备忘录

  • 思路:桶排的时间复杂度为O(n),相当于设置一个下标0到n的桶,遍历nums数组,在对应的下标设置为1,返回桶的连续为1的长度
  • 通过一半的用例,对于nums =[1,0,-1]无法处理
var longestConsecutive = function(nums) {
    // 桶排的时间复杂度为O(n),相当于设置一个下标0到n的桶,遍历nums数组,在对应的下标++,返回桶的连续不为0的长度
    let table = {}
    let cnt=1
    let max=1
    if(nums.length === 0){return 0}
    for(let n of nums){
        //对于每一个数字,当前数字做对象的key并把值加一
        table[n]=1
        console.log(table)
    }
    k = Object.keys(table)
    // console.log(k,'======')//[ '1', '2', '3', '4', '100', '200' ]
    //拿到对象中value值连续为1的最大值
    for(let i=0;i<k.length-1;i++){
        // console.log(Object.keys(table))
        //如果对象的后一个键比前一个键大1,cnt++,否则将cnt置为0
        //如果当前值比max大替换max
        //前面处理正数,后面处理负数,未处理nums =[1,0,-1]
        if (parseInt(k[i])+1==parseInt(k[i+1]) || parseInt(k[i])-1==parseInt(k[i+1])){
            cnt++
            // console.log(cnt,'-------')
            if(cnt>max){
                max=cnt
            }
        }else{
            cnt=1
        }
    }
    return max
}

法二、Set

var longestConsecutive = function(nums) {
    // 使用一个 Set 来存储数字,以便快速查找还可以去重
    let numSet = new Set(nums);
    let max = 0; // 初始化最大连续长度为 0
    // 遍历 Set 中的每个数字
    for (let num of numSet) {
        // 只从序列的起始点开始计算
        // 如果当前数字的前一个数字不存在,说明是一个新的连续序列的起始点
        if (!numSet.has(num - 1)) {
            let currentNum = num; // 当前数字
            let currentStreak = 1; // 当前连续序列的长度,初始为 1
            // 计算连续序列的长度
            // 只要下一个数字存在,就继续计数
            while (numSet.has(currentNum + 1)) {
                currentNum++; // 移动到下一个数字
                currentStreak++; // 增加当前连续序列的长度
            }
            // 更新最大连续长度
            max = Math.max(max, currentStreak);
        }
    }
    return max; // 返回最长连续序列的长度
};

标签:nums,max,序列,let,连续,128,长度,最长
From: https://www.cnblogs.com/lushuang55/p/18489197

相关文章

  • 时间序列预测(十)—长短期记忆网络(LSTM)
    目录一、LSTM结构二、LSTM核心思想三、LSTM分步演练(一)初始化1、权重和偏置初始化2、初始细胞状态和隐藏状态初始化(二)前向传播1、遗忘门计算(决定从上一时刻隐状态中丢弃多少信息)2、输入门及候选记忆元计算(决定存储多少选记忆元的新数据)3、记忆元更新4、输出门及隐状......
  • P1439 【模板】最长公共子序列
    P1439【模板】最长公共子序列实际上这题不能算dp,应该是贪心。先区分两个概念:LIS:LongestIncreasingSubsequence,最长递增子序列LCS:LongestCommonSubsequence,最长公共子序列将b数组中的元素映射为其在a数组中的位置,问题就从LCS变成了LIS。在求解LIS时,开一个单......
  • P4462 [CQOI2018]异或序列
    [CQOI2018]异或序列题目描述已知一个长度为n的整数数列\(a_1,a_2,...,a_n\),给定查询参数l、r,问在\(a_l,a_{l+1},...,a_r\)区间内,有多少子序列满足异或和等于k。也就是说,对于所有的x,y(I≤x≤y≤r),能够满足\(a_x\bigoplusa_{x+1}\bigoplus...\bigoplusa_y=k\)......
  • P4247 [清华集训2012]序列操作
    题目描述有一个长度为\(n\)的序列,有三个操作:Iabc表示将\([a,b]\)这一段区间的元素集体增加\(c\);Rab表示将\([a,b]\)区间内所有元素变成相反数;Qabc表示询问\([a,b]\)这一段区间中选择\(c\)个数相乘的所有方案的和\(\mod19940417\)的值。对于100%的数据,\(n\leq500......
  • VMD-DBO-CNN-BiLSTM四模型多变量时间序列光伏功率预测一键对比 Matlab代码
    基于VMD-DBO-CNN-BiLSTM、VMD-CNN-BiLSTM、VMD-BiLSTM、BiLSTM四模型多变量时间序列光伏功率预测一键对比(仅运行一个main即可)[原创未发表]Matlab代码每个模型的预测结果和组合对比结果都有!运行步骤:1.先运行main1进行VMD分解2.在运行main2进行四模型一键对比代码......
  • 11种经典时间序列预测方法:理论、Python实现与应用
    时间序列分析和预测在现代数据科学中扮演着关键角色,广泛应用于金融、经济、气象学和工程等领域。本文将总结11种经典的时间序列预测方法,并提供它们在Python中的实现示例。这些方法包括:自回归(AR)移动平均(MA)自回归移动平均(ARMA)自回归积分移动平均(ARIMA)季节性自回归积分......
  • 如何根据标记引物序列找到基因组上具体位置?
    要找到基因组上特定位置,仅凭标记引物序列,可以采用以下几种方法:利用在线工具进行In-SilicoPCR:可以使用UCSCGenomeBrowser提供的In-SilicoPCR工具(http://genome.ucsc.edu/cgi-bin/hgPcr)进行在线分析。这个工具允许你输入引物序列,并在基因组数据库中搜索匹配的序列。它还会......
  • Java反序列化 - CC1链 (代码审计)
    R###一、环境准备:Java环境:Java_1.8.0_8u65ApacheCommonsCollections3.2.2版本二、漏洞简述:cc链是Apachecommonscollections反序列漏洞利用链的简称。可以通过构造恶意类,利用Java反序列化漏洞进行RCE。漏洞复现:CC1链源头:org.apache.commons.collections.Transformer#tr......
  • 七,对象流(序列化)
    Java对象流(ObjectStreams)详解在Java中,对象流是用于对象的序列化和反序列化。序列化是将对象的状态信息转换为可以存储或传输的格式的过程,而反序列化则是将这种格式还原为Java对象的过程。对象流包括对象输出流ObjectOutputStream和对象输入流ObjectInputStream。序列化与反序列......
  • Prufer序列和Cayley公式
    首先定义无根树中度数为1的节点是叶子节点。找到编号最小的叶子并删除,序列中添加与之相连的节点编号,重复执行直到只剩下2个节点。这个序列为这棵树的Prufer序列。一棵有\(n\)个节点的无根树的Prufer序列的长度为n-2。显然,一棵无根树可以一一对应一个Prufer序列。而......