重温算法之最长连续序列

简介: 连续序列系列的题目也很多,我大概看了一下,解决方案里动态规划用得很多还有就是借助哈希表去实现,只能说题友们的思路真的很好,还有就是也应该尝试一下写出最优解。

一.题目介绍


1.题目来源


链接:LeetCode


2.题目


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


二.具体实现


1.实现思路


题目明确要求了要实现时间复杂度为 O(n) 的算法,那可以先对数组进行排序,然后计算其是否是连续的,是连续就统计其次数,在连续中如果中间有重复值跳过,没有就继续统计,如果连续被打断要记录被打断的位置,最后返回长度。


2.实现代码


1)自己的实现方式

public int longestConsecutive(int[] nums) {
 int len = nums.length;
        if(len == 0) return 0;
        //排序
        Arrays.sort(nums);
        int res = 0;
        int count = 1;
        for(int i=1;i<len;i++){
        //是连续统计+1
            if(nums[i]-nums[i-1]==1) count++;
            //是重复则跳过
            else if(nums[i] == nums[i-1]) continue;
            //连续被打断,判断是原来记录连续长还是新连续长
            else{
                res = Math.max(res,count);
                count = 1;
            }
        }
        return Math.max(res,count);
}
复制代码


2)题友的实现方式


动态规划:使用哈希表记录连续区间长度,遍历nums数组中的所有数字num,当num是第一次出现时: (1)分别获取到左相邻数字num-1的连续区间长度left和右相邻数字num+1的连续区间长度right; (2)计算得到当前的区间长度为curLen=left+right+1curLen=left+right+1; (3)更新最长区间长度ans以及左右边界的区间长度。 实现代码:

微信截图_20220531202637.png


3.运行结果

微信截图_20220531202704.png

微信截图_20220531202806.png


三.题后思考


连续序列系列的题目也很多,我大概看了一下,解决方案里动态规划用得很多还有就是借助哈希表去实现,只能说题友们的思路真的很好,还有就是也应该尝试一下写出最优解。

目录
相关文章
|
6天前
|
存储 算法 索引
模拟算法题练习(二)(DNA序列修正、无尽的石头)
模拟算法题练习(二)(DNA序列修正、无尽的石头)
|
6天前
|
设计模式 算法 Java
【数据结构和算法】递增的三元子序列
给你一个整数数组nums,判断这个数组中是否存在长度为3的递增子序列。 如果存在这样的三元组下标(i, j, k)且满足i < j < k,使得nums[i] < nums[j] < nums[k],返回true;否则,返回false。
57 3
|
6天前
|
算法
class072 最长递增子序列问题与扩展【算法】
class072 最长递增子序列问题与扩展【算法】
26 0
|
6天前
|
编解码 算法 定位技术
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
GEE时序——利用sentinel-2(哨兵-2)数据进行地表物候学分析(时间序列平滑法估算和非平滑算法代码)
107 3
|
6天前
|
算法
排序置顶、非置顶算法,实现置顶后的结果和非置顶的内容排序保持原始序列
排序置顶、非置顶算法,实现置顶后的结果和非置顶的内容排序保持原始序列
|
6天前
|
机器学习/深度学习 人工智能 运维
人工智能平台PAI 操作报错合集之请问Alink的算法中的序列异常检测组件,是对数据进行分组后分别在每个组中执行异常检测,而不是将数据看作时序数据进行异常检测吧
阿里云人工智能平台PAI (Platform for Artificial Intelligence) 是阿里云推出的一套全面、易用的机器学习和深度学习平台,旨在帮助企业、开发者和数据科学家快速构建、训练、部署和管理人工智能模型。在使用阿里云人工智能平台PAI进行操作时,可能会遇到各种类型的错误。以下列举了一些常见的报错情况及其可能的原因和解决方法。
|
6天前
|
算法 数据安全/隐私保护 数据格式
基于混沌序列的图像加解密算法matlab仿真,并输出加解密之后的直方图
该内容是一个关于混沌系统理论及其在图像加解密算法中的应用摘要。介绍了使用matlab2022a运行的算法,重点阐述了混沌系统的特性,如确定性、非线性、初值敏感性等,并以Logistic映射为例展示混沌序列生成。图像加解密流程包括预处理、混沌序列生成、数据混淆和扩散,以及密钥管理。提供了部分核心程序,涉及混沌序列用于图像像素的混淆和扩散过程,通过位操作实现加密。
|
6天前
|
编解码 算法 数据可视化
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
【视频】时间序列分类方法:动态时间规整算法DTW和R语言实现
|
6天前
|
存储 算法
从动态规划到贪心算法:最长递增子序列问题的方法全解析
从动态规划到贪心算法:最长递增子序列问题的方法全解析
119 2
|
6天前
|
算法 测试技术 C++
【动态规划】【C++算法】801. 使序列递增的最小交换次数
【动态规划】【C++算法】801. 使序列递增的最小交换次数