整数序列中最长的连续序列个数(LeetCode-128)

数组:无序的整数类型数组,求最长的连续元素序列的长度。 给定一个无序的整数类型数组,求最长的连续元素序列的长度。 例如: 给出的数组为[100, 4, 200, 1, 3, 2], 最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长度:4 你需要给出时间复杂度在O(n)之内的算法 给定一个无序的整数类型数组,求最长的连续元素序列的长度。 例如: 给出的数组为[100, 4, 200, 1, 3, 2], 最长的连续元素序列为[1, 2, 3, 4]. 返回这个序列的长度:4 你需要给出时间复杂度在O(n)之内的算法 //暴力算法 阅读详情

1、题目描述

    求一个整数序列中最长的连续子序列个数,比如输入:[100, 4, 200, 1, 3, 2],输出:4

2、解题思路

(1)先排序,从有序序列中找连续子序列,时间复杂度为O(nlogn),代码如下:

    int longestConsecutive(vector<int>& nums) {
        if(nums.size()==0)
            return 0;
        sort(nums.begin(),nums.end());
        int count = 1;
        int len = 1;
        int j = 1;
        for(int i=1;i<nums.size();i++){            
            if(nums[i]-nums[i-j]==1){
                count++;
                if(len<count)
                    len = count;
                j=1;
            }
            else if(nums[i]==nums[i-j])
                j++;
            else{
                j = 1;
                count=1;      
            }
        }
        return len;
    }

(2)使用哈希表(unordered_set)记录每个元素是否出现,然后查找,时间复杂度为O(n),空间复杂度为O(n),代码如下:

    int longestConsecutive(vector<int>& nums) {
        if(nums.size()==0)
            return 0;
        unordered_set<int> temp;
        for(int i=0;i<nums.size();i++)
            temp.insert(nums[i]);
        int count = 1;
        int len = 1;
        int current;
        for(auto elem:temp){
            if(temp.count(elem-1)==0){
                current = elem;
                count = 1;
                while(temp.count(current+1)==1){
                    current+=1;
                    count+=1;
                }
                if(len<count)
                    len = count;
            }
        }
        return len;
    }

 

【中等】力扣算法题解析LeetCode128:最长连续序列 本文提出了一种高效算法,用于在未排序整数数组中寻找最长连续数字序列的长度。通过哈希集合存储元素实现O(1)查询,仅处理序列起点减少了冗余计算。算法首先识别连续序列的最小元素作为起点,然后向后扩展计算序列长度,最终返回全局最大值。该方法时间复杂度为O(n),空间复杂度为O(n),能够处理10^5量级的数据,实测执行时间仅14ms,内存消耗58.6MB。关键优化在于跳过非起点元素,避免重复计算,保证线性时间复杂度。 阅读详情

相关推荐

CAD制图

CAD制图可以提高设计效率和准确性,并方便文档的存档和交流,是现代工程设计中不可或缺的一部分。·CAD三维开发是指使用计算机程序和工具来创建、编辑和操作三维模型、图形和设计的过程。它在工程、建筑、制造和游戏等领域广泛应用。CAD三维开发可能涉及到复杂的图形算法、性能优化、并行计算等方面的内容,因此需要深入学习和实践,以提高开发的效率和质量。

RZer的博客 1652

【WZOI】(基础题库)第442题 包含两个不同整数的最长连续子序列

试求一个整数序列中, 最长的仅包含两个不同整数的连续子序列。如有多个子序列并列最长,输出第一个即可。第一行包含整数 n。第二行包含 n 个整数(均在 1~10^5 范围内),表示整数序列。共两行第一行包含一个整数,表示最长的仅包含两个不同整数的连续子序列长度m。第二行包含m个整数,即这个最长的仅包含两个不同整数的连续子序列。1≤n≤10^5147时间限制: 1000ms空间限制: 256MB使用双指针优化算法。

2301_80275839的博客 255

SRv6项目实践(三):P4Runtime基础以及交换机控制

在正式介绍P4runtime基础之前,先说一说P4的编译和实现的过程该文件包含了各个表和操作,它们的id用一个索引值来表示,比如a表用b操作,不会直接说用名字为B的操作,而是说用索引为xxx的操作,然后锁定到b上执行相关的功能,其次,用了一个bitwith来描述,要访问的数据的比特长度是多长。p4c编译器将p4编译成两份文件,其中一份是,另一份是,将这两个文件再整合起来,作为配置,放到交换机中。

a1164520408的博客 3411

最大连续子序列的四种求解方法

第一种:常规的求解算法:使用三层for循环,然后进行比较得到最大值最后进行返回即可 第一层for循环确定开始的子序列的位置 第二次for循环确定结束的子序列的位置 第三层for循环进行求和相加 if判断进行求和比较返回较大的子序列的和package 最大子序列求和方法一;public class MaxSum01 { public static int MaxSum(int[]

Mr long的博客 2241

PCB布局规范及其注意事项(纯干货)

这样做的好处是信号1,3层不会有串扰,4和5作为电源有紧密的耦合,3个信号层都有GND平面可以参考,且不会互相产生串扰,唯一的缺点是布线的层面只有3个信号层(信号03的是最适合来传输高速信号,因为该层的二面都有屏蔽,防止干扰传出,也防止干扰传入)33、影响阻抗匹配的参数(ER介电常数(1GHZ以下默认为4.2,以上的话问板厂),H介质厚度(就是内层压合的PP片厚度),W走线的线宽,T走线的厚度(铜厚/减小线的厚度可以增大阻抗))我这里使用的是CITS25来计算阻抗。

qq_42379138的博客 8846

施耐德 Modicon M580 ePAC 项目实战:从硬件选型到 Control Expert V15 组态

本文详细解析了施耐德 Modicon M580 ePAC 在工业自动化项目中的实战应用,从硬件选型到 Control Expert V15 组态的全流程。重点介绍了水处理站控制系统的硬件配置、网络架构设计、软件安装授权及程序框架开发,帮助工程师高效实施中大型控制系统项目。

weixin_33701617的博客 328

六种姿势拿下连续子序列最大和问题,附伪代码(以HDU 1003 1231为例)

问题描述:       连续子序列最大和,其实就是求一个序列中连续的子序列中元素和最大的那个。       比如例如给定序列:            { -2, 11, -4, 13, -5, -2 }         其最大连续子序列为{ 11, -4, 13 },最大和为20。 =================================================

水果君の日常 2万+

【Flink】FlinkSQL如何触发执行计算

Table (通过 StatementSet.addInsert() 输出给某个 Sink)和 INSERT 语句 (通过调用 StatementSet.addInsertSql())会先被缓存到 StatementSet 中,StatementSet.execute() 方法被调用时,所有的 sink 会被优化成一张有向无环图。该方法是用来将一个表的内容插入到目标表中,一旦该方法被调用, TABLE API 程序立即被翻译。该方法是用来执行一个 SQL 语句,一旦该方法被调用, SQL 语句立即被翻译。

一杯咖啡半杯糖的博客 1007

C++:最长连续不重复子序列 ( 双指针算法 )

​​​​​给定一个长度为 n 的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。第二行包含 n 个整数(均在 0∼1e5 范围内),表示整数序列。共一行,包含一个整数,表示最长的不包含重复的数的连续区间的长度。第一行包含整数 n。

Hacker_Hao的博客 341

【异常】XXL-JOB提示异常ERROR com.xxl.job.core.util.XxlJobRemotingUtil - connect timed out

打开XXL-JOB的ELK,发现一堆报错。

奶爸的编程之路,也就一周冷个三天 2048

建立时间与保持时间

建立时间与保持时间的计算 文章目录1、建立时间与保持时间概述及模型2、寄存器之间数据传输时建立时间与保持时间3、寄存器之间数据传输时建立时间余量与保持时间余量计算4、 FPGA允许的最大时钟频率或最小时钟周期5、计算FPGA时钟所允许的最大频率或最小时钟周期6、违反建立和保持时间会发生什么? 1、建立时间与保持时间概述及模型 建立时间(Tsu): 在时钟采样之前,输入必须稳定一段时间,该时间量称为建立时间。 理想最优建立时间: 保持时间(Th): 在时钟沿之后输入到触发器稳定所需的最短时间。 理想最优

Crazzy_M的博客 3万+

128.最长连续序列(C++实现)

4. 然后判断当前元素和下一个元素的关系:如果相邻且不相等,说明找到了一个可能的连续序列的起点;否则,说明当前元素不在任何连续序列中,将临时序列长度max\_t重置为1。6.然后判断当前元素和下一个元素的关系:如果相邻且不相等,说明找到了一个可能的连续序列的起点;否则,说明当前元素不在任何连续序列中,将临时序列长度max_t重置为1。3. 初始化两个变量max\_r和max\_t,分别表示当前最长序列的长度和临时序列的长度。5.对于每个元素,首先更新当前最长序列的长度max_r。

qq_62748549的博客 621

AI:240-YOLOv8高效涨点 |Swin Transformer的主干网络替换与优化(附代码 + 详细修改步骤 +原理介绍)

YOLOv8作为目标检测领域的最新版本,在速度和精度之间取得了良好的平衡。然而,随着计算机视觉任务的复杂性不断增加,YOLOv8的标准主干网络(Backbone)在处理高分辨率图像或多尺度目标时,可能存在一定的局限性。为了进一步提升YOLOv8的性能,我们可以引入Swin Transformer替换其主干网络,以增强模型的全局感知能力和多尺度特征提取能力。本文将详细介绍如何在YOLOv8中用Swin Transformer替换原有的Backbone,提供代码示例,并深入探讨其中的原理和效果。

一键难忘的博客 3960

LeetCode第128题_最长连续序列

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

qq_40263592的博客 2094

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

LeetCode 128 最长的连续序列

将所有元素添加到HashSet去重:如果数组中包含重复的元素,HashSet会自动去除这些重复项。这样做可以避免在寻找连续序列时对同一个数字重复计算。快速查找HashSet的查找时间复杂度为 O(1),这意味着无论集合中有多少元素,查找操作的速度都非常快。在这个问题中,我们需要频繁地检查某个元素是否存在于集合中,特别是在判断连续序列时,能否快速判断一个元素是否存在直接影响算法的整体效率。确定序列起点:算法的核心在于找到连续序列的起点,然后从这些起点开始向后寻找连续的元素。使用HashSet。

weixin_48051871的博客 733

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Leetcode 每日一题 128.最长连续序列

两种解法都利用了 HashSet 或 HashMap 来减少查找的时间复杂度,使得整体的时间复杂度为 O(n)。HashSet 版的解法更为简洁,而 HashMap 版的解法则提供了一种不同的思路。

weixin_73687229的博客 1295

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

最长连续序列(LeetCode 128)

但仔细分析这个过程,我们会发现其中执行了很多不必要的枚举,如果已知有一个 x,x+1,x+2,⋯ ,x+y 的连续序列,而我们却重新从 x+1,x+2 或者是 x+y 处开始尝试匹配,那么得到的结果肯定不会优于枚举 x 为起点的答案,因此我们在外层循环的时候碰到这种情况跳过即可。增加了判断跳过的逻辑之后,时间复杂度是多少呢?我们考虑枚举数组中的每个数 x,考虑以其为起点,不断判断 x+1,x+2,⋯x+1, x+2,⋯ 是否存在,假设最长匹配到了 x+y,其长度为 y+1,我们不断枚举并更新答案即可。

Doublelv 的博客专栏。 1626

力扣LeetCode 128题:最长连续序列

题目: 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 分析 要找 连续序列 的长度,从结果可以看出,主要是为了排序,排序之后,遍历结果就可以进行连续长度的更新。 但是排序的算法,即使快排的时间复杂度也有O(nlogn),不满足要求。 这种时候一般就会想到借助哈希表,也就是类似计数排序,先来试试,用数组来做哈希表,下标做n

LifeGoesOn 1429

leetcode128 最长连续序列

给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为O(n)。 示例: 输入:[100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为4 思路:map记录某个连续序列端点的最大长度。 对于数字i,如果已经存在,跳过。 否则: 如果有端点i-1和i+1,合并。 如果只有一边,和本数字合并。 如果...

少说,多做。 3678

LeetCode题练习与总结:最长连续序列--128

本篇文章介绍了如何使用哈希集合求解未排序数组中最长连续序列长度的问题,时间复杂度为O(n),空间复杂度为O(n)。

一直学习永不止步 1289

LeetCode 128.最长连续序列

对于每个元素,最多只会被访问两次,一次作为序列的起点(即内层循环),一次作为序列的一部分(即外层循环),因此时间复杂度为。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。解释:最长数字连续序列是 [1, 2, 3, 4]。输入:nums = [0,3,7,2,5,8,4,6,0,1]输入:nums = [100,4,200,1,3,2]显然,不能对数组进行排序,因为排序的时间复杂度是。输入:nums = [1,0,1,2]请你设计并实现时间复杂度为。

qq_73593013的博客 942

LeetCode hot 100 每日一题(3)--128. 最长连续序列

下面是HashSet在 Java 中的声明和基本用法示例,以及详细解释:在 Java 中,HashSet是一个基于哈希表(HashMap)实现的集合类,用于存储不重复的元素。​它不保证元素的顺序,即元素的插入顺序可能与迭代顺序不同。声明HashSet要使用 HashSet,首先需要导入类。// 创建一个存储字符串的 HashSet Set < String > set = new HashSet < >();

m0_46464899的博客 1375

LeetCode 128. 最长连续序列【c++/java详细题解】

目录1、题目2、思路3、c++代码4、java代码 1、题目 给定一个未排序的整数数组 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 &

林深不见鹿 的博客 2275

力扣题解系列:128. 最长连续序列

题目:128. 最长连续序列 题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 解题思路: 对于在数组中的元素i,若i-1或者i+1也在数组中,则它们在一个连续序列中。但是同时考虑i-1和i+1就比较麻烦,而且在数组中查找元素的时间复杂度为O(n),不满足题目要求。于是可以只考虑i+1,这样做的前提条件是找到每个连

qq_38813052的博客 464

力扣第128题最长的连续序列

128.最长连续序列 难度:困难 标签:并查集 给定一个未排序的整数数组,找出最长连续序列的长度。 要求算法的时间复杂度为 O(n)。 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。 思路:运用并查集,使用hashmap fatherset key是数组的值,value是key的父结点 初始化时,一共n个树。还有一个hashmap size 放的是每棵树的大小结点个数 遍历数组,然后把判断nums[i]-1是

zzxdddd的博客 438

力扣(LeetCode)100题:128.最长连续序列

特点说明时间复杂度 O(n)每个数字最多被访问两次(一次在外层循环,一次在while中),均摊 O(1)空间复杂度 O(n)需要额外集合存储去重后的数字无需排序完全基于哈希查找,避免 O(n log n) 排序开销自动去重集合天然消除重复元素干扰。

sweet_ran的博客 575
上一篇: 求无重复元素集合的所有子集(LeetCode-78)
下一篇: STL容器之vector、list
蓬莱道人
博客等级 码龄11年 766粉丝 274原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值