LeetCode128 最长连续序列

最长连续序列

题目链接:LeetCode128

描述

给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。

请你设计并实现时间复杂度为 O(n) 的算法解决此问题。

示例

输入:nums = [100,4,200,1,3,2]

输出:4

解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

思路

1、用一个哈希表存储数组中的数。

2、遍历哈希表,查找当前的数前面一个数是否存在,即num-1在哈希表里面是否存在,如果存在这个数,那么当前的num肯定不是最长连续序列的第一位数,直接跳过。

3、如果不存在,那么计算以num开头的连续序列的长度,直接判断num++是否存在,存在则长度curLen++。

4、将得到的连续序列的长度与前一个连续序列的长度比较,取大的那一个,不断更新最长连续序列的长度,最后返回。

代码

java 复制代码
class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for(int num : nums){
            set.add(num);
        }
        int result = 0;
        for(int num : set){
            if(!set.contains(num-1)){
                int curLen = 0;
                int curNum = num;
                while(set.contains(curNum++)){
                    curLen += 1;
                }
                result = Math.max(result,curLen);
            }
        }
        return result;
    }
}
相关推荐
DdddJMs__1351 小时前
C语言 | Leetcode C语言题解之第557题反转字符串中的单词III
c语言·leetcode·题解
Sunyanhui12 小时前
力扣 二叉树的直径-543
算法·leetcode·职场和发展
一个不喜欢and不会代码的码农2 小时前
力扣105:从先序和中序序列构造二叉树
数据结构·算法·leetcode
AnFany7 小时前
LeetCode【0051】N皇后
python·算法·leetcode·回溯法·n皇后
可别是个可爱鬼7 小时前
代码随想录 -- 动态规划 -- 完全平方数
数据结构·python·算法·leetcode·动态规划
一直学习永不止步8 小时前
LeetCode题练习与总结:至少有 K 个重复字符的最长子串--395
java·算法·leetcode·字符串·滑动窗口·哈希表·分治
DdddJMs__1359 小时前
C语言 | Leetcode C语言题解之第552题学生出勤记录II
c语言·leetcode·题解
DdddJMs__1359 小时前
C语言 | Leetcode C语言题解之第554题砖墙
c语言·leetcode·题解
我是聪明的懒大王懒洋洋10 小时前
力扣力扣力:53.最大子数组和
算法·leetcode·职场和发展
九圣残炎11 小时前
【从零开始的LeetCode-算法】3345. 最小可整除数位乘积 I
java·算法·leetcode