leetcode128.最长连续序列

可以用哈希表解决,先遍历选取每一个元素num作为起始值,然后判断num+1是否也在数组中,如果在就序列长度+1,但是用哈希表这么做实际上时间复杂度为o(n^2),为了降低到n,每一个元素只能访问一次,那么也就是如果num做为起始值,那么他的前驱num-1是不能在数组中的,这样就可以避免重复访问

cpp 复制代码
class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> numSet;
        for(const int& num:nums)
            numSet.insert(num);

        int result=0;
        for(const int& num:nums){
            if(numSet.find(num-1)!=numSet.end())
                continue;
            else{
                int len=1;
                int currentNum=num;
                while(numSet.find(currentNum+1)!=numSet.end()){
                    len++;
                    currentNum++;
                }
                result=max(result,len);
            }
        }
        return result;
    }
};

然而虽然代码和官方差不多还是有用例超时,对于如下这种有m个0的如果作为起始值,后续还有1,2,3,4让其进入内层循环的,时间复杂度为o(mn),为了避免这种情况还得对0去重

cpp 复制代码
class Solution {
public:
    int longestConsecutive(vector<int>& nums) {
        unordered_set<int> numSet;
        for(const int& num:nums)
            numSet.insert(num);

        int result=0;
        unordered_set<int> remDup;
        for(const int& num:nums){
            if(numSet.find(num-1)!=numSet.end()||remDup.find(num)!=remDup.end())
                continue;
            else{
                remDup.insert(num);
                int len=1;
                int currentNum=num;
                while(numSet.find(currentNum+1)!=numSet.end()){
                    len++;
                    currentNum++;
                }
                result=max(result,len);
            }
        }
        return result;
    }
};
相关推荐
源代码•宸1 天前
分布式缓存-GO(分布式算法之一致性哈希、缓存对外服务化)
开发语言·经验分享·分布式·后端·算法·缓存·golang
yongui478341 天前
MATLAB的指纹识别系统实现
算法
高山上有一只小老虎1 天前
翻之矩阵中的行
java·算法
jghhh011 天前
RINEX文件进行卫星导航解算
算法
爱思德学术1 天前
中国计算机学会(CCF)推荐学术会议-A(计算机科学理论):LICS 2026
算法·计算机理论·计算机逻辑
CVHub1 天前
多模态图文训推一体化平台 X-AnyLabeling 3.0 版本正式发布!首次支持远程模型推理服务,并新增 Qwen3-VL 等多款主流模型及诸多功能特性,等
算法
hoiii1871 天前
MATLAB实现Canny边缘检测算法
算法·计算机视觉·matlab
qq_430855881 天前
线代第二章矩阵第四课:方阵的幂
算法·机器学习·矩阵
roman_日积跬步-终至千里1 天前
【计算机设计与算法-习题2】动态规划应用:矩阵乘法与钢条切割问题
算法·矩阵·动态规划
kupeThinkPoem1 天前
计算机算法导论第三版算法视频讲解
数据结构·算法