【LeetCode】128. 最长连续序列

题目

128. 最长连续序列

思路

每个数都判断一次这个数是不是连续序列的开头那个数。用哈希表查找这个数前面一个数是否存在,即num-1在序列中是否存在。如果存在则这个数肯定不是开头,跳过。因此只需要对每个开头的数进行循环,直到这个序列不再连续。

100,4,200,1,3,4,2

去重后的哈希序列为:

100,4,200,1,3,2

按照上面逻辑进行判断:

1.元素100是开头,因为没有99,且以100开头的序列长度为1

2.元素4不是开头,因为有3存在,过

3.元素200是开头,因为没有199,且以200开头的序列长度为1

4.元素1是开头,因为没有0,且以1开头的序列长度为4,因为依次累加,2,3,4都存在。

5.元素3不是开头,因为2存在,过,

6.元素2不是开头,因为1存在,过。

代码

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

        int longestStreak = 0;

        for (const int& num : num_set) {
            if (!num_set.count(num - 1)) {
                int currentNum = num;
                int currentStreak = 1;

                while (num_set.count(currentNum + 1)) {
                    currentNum += 1;
                    currentStreak += 1;
                }

                longestStreak = max(longestStreak, currentStreak);
            }
        }

        return longestStreak;           
    }
};
相关推荐
IT猿手3 小时前
基于强化学习 Q-learning 算法求解城市场景下无人机三维路径规划研究,提供完整MATLAB代码
神经网络·算法·matlab·人机交互·无人机·强化学习·无人机三维路径规划
万能程序员-传康Kk6 小时前
旅游推荐数据分析可视化系统算法
算法·数据分析·旅游
PXM的算法星球6 小时前
【并发编程基石】CAS无锁算法详解:原理、实现与应用场景
算法
ll7788116 小时前
C++学习之路,从0到精通的征途:继承
开发语言·数据结构·c++·学习·算法
烨然若神人~6 小时前
算法第十七天|654. 最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
算法
爱coding的橙子6 小时前
每日算法刷题Day2 5.10:leetcode数组1道题3种解法,用时40min
算法·leetcode
阳洞洞7 小时前
leetcode 18. 四数之和
leetcode·双指针
程序媛小盐7 小时前
贪心算法:最小生成树
算法·贪心算法·图论
Panesle7 小时前
分布式异步强化学习框架训练32B大模型:INTELLECT-2
人工智能·分布式·深度学习·算法·大模型
多多*7 小时前
算法竞赛相关 Java 二分模版
java·开发语言·数据结构·数据库·sql·算法·oracle