Hot100-Day24-T128最长连续序列

Day24[26/3/24]T128最长连续序列

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

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

示例 1:

ini 复制代码
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。

示例 2:

ini 复制代码
输入:nums = [0,3,7,2,5,8,4,6,0,1]
输出:9

示例 3:

ini 复制代码
输入:nums = [1,0,1,2]
输出:3

提示:

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

解题思路

先用哈希表(集合 set,而不是字典 map)把数组存起来,

然后这样子思考:你先检查一个元素是不是连续字串的开头

比如说,3 是不是开头,就看 2 这个元素在不在哈希表中,如果 2 存在那么 3 就不是开头,就没必要从 3 开始查这个连续子串有多长。如果不存在 2,那么 3 肯定是一个连续子串的开头,那么就检查有没有 4、5、6,检查到最后是几,那么一减不就是这个连续子串的长度么。然后统计一下全局最长就行了。

Code

arduino 复制代码
#include <iostream>
#include <vector>
#include <unordered_set>

using namespace std;

class Solution
{
public:
    int longestConsecutive(vector<int> &nums)
    {
        int maxLength = 0;
        unordered_set<int> set;
        for (const auto &num : nums)
        {
            set.insert(num);
        }
        for (const auto &num : set)
        {
            if (set.count(num - 1))
            {
                // 如果num-1存在就不是开头直接退出
                continue;
            }
            else
            {
                // 如果num-1不存在,就是开头,统计长度!
                int count = 0;
                int temp_num = num;
                while (set.count(temp_num++))
                {
                    count++;
                }
                if (count > maxLength)
                {
                    maxLength = count;
                }
            }
        }
        return maxLength;
    }
};

auto main() -> int
{
    Solution sol;
    vector<int> nums{1, 2, 3, 4, 5, 9};

    cout << "result = " << sol.longestConsecutive(nums) << endl;
}
相关推荐
小肥柴1 小时前
A2UI:面向 Agent 的声明式 UI 协议(三):相关概念和技术架构
算法
学高数就犯困4 小时前
性能优化:LRU缓存(清晰易懂带图解)
算法
CoovallyAIHub7 小时前
CVPR 2026 | MixerCSeg:仅2.05 GFLOPs刷新四大裂缝分割基准!解耦Mamba隐式注意力,CNN+Transformer+Mamba三
深度学习·算法·计算机视觉
CoovallyAIHub7 小时前
YOLO26-Pose 深度解读:端到端架构重新设计,姿态估计凭什么跨代领先?
深度学习·算法·计算机视觉
CoovallyAIHub8 小时前
化工厂气体泄漏怎么用AI检测?30张图3D重建气体泄漏场景——美国国家实验室NeRF新研究
深度学习·算法·计算机视觉
颜酱19 小时前
图的数据结构:从「多叉树」到存储与遍历
javascript·后端·算法
zone77391 天前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试
CoovallyAIHub1 天前
OpenClaw 近 2000 个 Skills,为什么没有一个好用的视觉检测工具?
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
CVPR 2026 | 用一句话告诉 AI 分割什么——MedCLIPSeg 让医学图像分割不再需要海量标注
深度学习·算法·计算机视觉