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;
    }
};
相关推荐
程序员-King.6 小时前
day86——有效的字母异位词(LeetCode-242)
算法·字符串
xxxxxxllllllshi7 小时前
Java 代理模式深度解析:从静态到动态,从原理到实战
java·开发语言·笔记·算法·代理模式
Starry_hello world7 小时前
C++ 二分算法(1)
c++·算法·有问必答
小杨勇敢飞8 小时前
拼图小游戏开发日记 | Day3(已完结)
java·数据结构·算法
Guan jie8 小时前
10.6作业
数据结构·算法·排序算法
haidizym8 小时前
ssc-FinLLM 金融大模型 相关链接
人工智能·算法
Macre Aegir Thrym8 小时前
逻辑回归实践
算法·机器学习·逻辑回归
relis8 小时前
llama.cpp RMSNorm CUDA 优化分析报告
算法·llama
chaofa用代码打点酱油9 小时前
RAG 进化之路:传统 RAG 到工具与强化学习双轮驱动的 Agentic RAG
算法·llm
一只小阿柒10 小时前
【无标题】
算法