Given an unsorted array of integers, find the length of the longest consecutive elements sequence.
For example,
Given [100, 4, 200, 1, 3, 2]
,
The longest consecutive elements sequence is [1, 2, 3, 4]
. Return its length: 4
.
Your algorithm should run in O(n) complexity.
找出最大连续的序列长度。
用STL快又简单,道理我懂,但是这题初衷应该是让我们用并查集做,虽然这会烦一些慢一些。
好久没写并查集,有点生疏
代码语言:javascript复制class Solution {
public:
int find(int x,unordered_map<int,int> &set)//引用不需要拷贝到函数空间,事实证明引用比传值快
{
if(set[x]!=x)
set[x]=find(set[x],set);
return set[x];
}
int longestConsecutive(vector<int>& nums) {
int res=1;
if(nums.empty()) return 0;
unordered_map<int,int> set,dp;
for(int i=0;i<nums.size();i )
{
set[nums[i]]=nums[i];
dp[nums[i]]=1;
}
for(int i=0;i<nums.size();i )
{
int y,x=find(nums[i],set);
if(set.find(nums[i]-1)!=set.end())
{
y=find(nums[i]-1,set);
if(y!=x)
{
dp[x] =dp[y];
set[y]=x;
}
res=max(res,dp[x]);
}
if(set.find(nums[i] 1)!=set.end())
{
y=find(nums[i] 1,set);
if(y!=x)
{
dp[x] =dp[y];
set[y]=x;
}
res=max(res,dp[x]);
}
}
return res;
}
};