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;
}
相关推荐
我叫黑大帅5 分钟前
为什么map查找时间复杂度是O(1)?
后端·算法·面试
炽烈小老头30 分钟前
【每天学习一点算法 2026/04/20】除自身以外数组的乘积
学习·算法
skilllite作者1 小时前
AI agent 的 Assistant Auto LLM Routing 规划的思考
网络·人工智能·算法·rust·openclaw·agentskills
py有趣3 小时前
力扣热门100题之不同路径
算法·leetcode
_日拱一卒3 小时前
LeetCode:25K个一组翻转链表
算法·leetcode·链表
啊哦呃咦唔鱼3 小时前
LeetCodehot100-394 字符串解码
算法
小欣加油3 小时前
leetcode2078 两栋颜色不同且距离最远的房子
数据结构·c++·算法·leetcode·职场和发展
我真不是小鱼3 小时前
cpp刷题打卡记录30——轮转数组 & 螺旋矩阵 & 搜索二维矩阵II
数据结构·c++·算法·leetcode
逻辑驱动的ken5 小时前
Java高频面试考点场景题09
java·开发语言·数据库·算法·oracle·哈希算法·散列表
帅小伙―苏5 小时前
力扣42接雨水
前端·算法·leetcode