实现整数数组的最长连续序列

题目: 给你一个数组 nums ,求出其中的最长连续序列。比如输入为[1,2,3,5,6,9],输出为[1,2,3]

思想: 将数组中的元素存入Set集合中:

  • Set中不包含num - 1这个值,则说明该值是一个可能结果值的起点(比如1和5)

    • 从这个值开始,若Set中包含currNum + 1,则说明这是一个连续序列

    • 判断这一个序列长度是否是最大的,更改最长序列长度,最终将该值存储下来


**总结:**先找到连续序列的起点,然后根据起点与集合元素找到该序列的其他值


代码

java 复制代码
public class test{
    public static int[] longestSub(int[] nums){
        //数组为空,直接返回
        if(nums == null || nums.length == 0){
            return new int[0];
        }
        
        //创建一个Set集合存储数组的每个值
        Set<Integer> set = new HashSet<>();
        for(int num : nums){
            set.add(nums);
        }
        
        //记录一个结果的最大长度值和序列的起始值
        int maxLength = 0;
        int start = 0;
        
        for(int num : nums){
        //如果当前值 - 1不包含在Set中,说明这是一个序列起点    
            if(!set.contains(num - 1)){
                int currNum = num;
                int currLength = 1;
                
                //从当前值出发,如果set集合中还存在currNum + 1的值,说明是结果序列的值
                while(set.contains(currNum + 1)){
                    currLength++;
                    currNums++;
                }
                
                //如果当前序列的长度大于最大长度,则更改最长长度和起始值
                if(currLength > maxLength){
                    maxLength = currLength;
                    start = num;
                }
            }
        }
        int[] res = new int[maxLength];
        //结果值为:start + i(第一个值就是1,第二个是start + 1, 第三个是start + 2、、、、、、)
        for(int i = 0; i < maxLength; i++){
            res[i] = start + i;
        }
        return res;
    }
    
    public static void main(String[] args){
        int[] arr = {1,2,3,5,6,9};
        int[] res = longestSub(arr);
        for(int n : res){
            System.out.pringln(n);
        }
    }
}
相关推荐
mjhcsp11 分钟前
透彻背包DP:从DFS暴力搜索到动态规划的逐步推导
算法·深度优先·动态规划
学嵌入式的小杨同学15 分钟前
【嵌入式 C 语言实战】交互式栈管理系统:从功能实现到用户交互全解析
c语言·开发语言·arm开发·数据结构·c++·算法·链表
多米Domi01117 分钟前
0x3f 第40天 setnx的分布式锁和redission,写了一天项目书,光背了会儿八股,回溯(单词搜索)
数据结构·算法·leetcode
乐迪信息18 分钟前
乐迪信息解决港口船型识别难题!AI算法盒子检测船舶类型
人工智能·算法·智能电视
梭七y34 分钟前
【力扣hot100题】(151)课程表
算法·leetcode·哈希算法
孞㐑¥1 小时前
算法—滑动窗口
开发语言·c++·经验分享·笔记·算法
历程里程碑1 小时前
Linux 3 指令(3):进阶指令:文件查看、资源管理、搜索打包压缩详解
linux·运维·服务器·c语言·数据结构·笔记·算法
咋吃都不胖lyh1 小时前
GBDT 中的前向分布算法和贪婪学习
学习·算法
leo__5201 小时前
CLEAN算法仿真程序,用于雷达信号中的杂波抑制
算法
一分之二~1 小时前
二叉树--求最小深度(迭代和递归)
数据结构·c++·算法·leetcode·深度优先