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

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109

解答

cpp 复制代码
class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        // 将数组先转存哈希表
        // 然后在数组中对每个元素x,在哈希表中查找 x + 1 是否存在

        // 1. 转存哈希表
        unordered_set<int> num_set;
        for(const int &num : nums)
        {
            num_set.insert(num);
        }

        int res = 0;

        for(const int &num : num_set)
        {
            // 应该判断num - 1 是否存在
            // 若存在本轮就不需要计算了
            if(!num_set.count(num-1))
            {
                int cur = num;
                int curlen = 1;

                while(num_set.count(cur + 1))
                {
                    cur += 1;
                    curlen += 1;
                }
                res = max(res, curlen);
            }
        }
        return res;
    }
};
相关推荐
青少儿编程课堂5 小时前
蓝桥杯青少组图形化省考报名倒计时·全国青少年信息素养大赛·电子学会图形化考级:校园黑白棋人机对战解析
c++·python·算法·bfs·信息学竞赛
jktantan6 小时前
注解式脱敏:用 Jackson 的 ContextualSerializer 做字段级策略(一)
spring boot·后端·算法·spring cloud·系统架构
Dream it possible!18 小时前
LeetCode 面试经典 150_多维动态规划_交错字符串(97_C++_中等)
算法·leetcode·面试·动态规划
心抵鹊19 小时前
算法之双指针系列(一)
算法·leetcode
十二19 小时前
【洛谷题解】P1083 [NOIP 2012 提高组] 借教室(二分答案 + 差分)
数据结构·c++·算法·蓝桥杯
小此方20 小时前
[算法实战论:动态规划]回文串问题的dp解法,回文串问题的母题,以及以此为基础的派生题
算法·动态规划
Pniubi21 小时前
力扣560.和为k的子数组
算法·leetcode·职场和发展
D e re k ZH21 小时前
C++ 从零入门(一):基础语法与程序结构
数据结构·c++·算法
Pniubi21 小时前
力扣438.找到字符串中所有字母异位词
算法·leetcode·职场和发展
東隅已逝,桑榆非晚1 天前
算法6. 双指针法-查找总价格为目标的两个商品
c++·学习·算法