Hot100-Day24-T128最长连续序列

Day2426/3/24T128最长连续序列

给定一个未排序的整数数组 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;
}
相关推荐
北域码匠35 分钟前
SHA-1算法:安全哈希原理与应用解析
算法·c#·哈希算法
手写码匠1 小时前
手写 GraphRAG:从零实现图增强检索增强生成系统
人工智能·深度学习·算法·aigc
BomanGe11 小时前
NSK重载高刚性滚珠丝杠技术详解
经验分享·算法·规格说明书
Matrix_112 小时前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影
WBluuue2 小时前
数据结构与算法:有序表(二):跳表
数据结构·c++·算法·skiplist
x138702859574 小时前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
海兰4 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
zwenqiyu4 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法
wayz114 小时前
Momentum:TSI(真实强度指数)技术指标详解
算法·金融·数据分析·量化交易·特征工程
万事大吉CC5 小时前
Python 笔试输入模板总结
python·算法