可以用哈希表或者并查集做
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
//哈希表
set<int> vis;
for(auto num : nums)
{
vis.insert(num);
}
int res = 0;
int sum = 0;
for(auto num : nums)
{
sum = 1;
// 如果当前数字后面有紧跟着的数字
int cur = num + 1;
while(vis.count(cur))
{
sum++;
cur++;
}
res = max(res, sum);
}
return res;
}
};
// 并查集
class Solution {
//<子,父>
unordered_map<long, long> a, b;
// 并查集
long find(long x)
{
return a.count(x) ? a[x] = find(a[x]) : x;
}
public:
int longestConsecutive(vector<int>& nums) {
for(auto num : nums)
//num的父节点是num+1
a[num] = num + 1;
int res = 0;
for(auto num : nums)
{
//查找当前节点的后续(父节点)最长能到哪里
long y = find(num + 1);
int dis = y - num;
res = max(res, dis);
}
return res;
}
};