/*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.*/
#include <vector>
#include <unordered_set>
#include <algorithm>
#include <iostream>
class Solution
{
public:
int longestConsecutive(std::vector<int>& num)
{
if(num.size()==0)
return 0;
std::unordered_set<int> set;
int longest=0;
int cc=0;
std::for_each(num.begin(),num.end(),[&](const int& val)
{
set.insert(val);
}
);
std::for_each(num.begin(),num.end(),[&](const int& val)
{
if(set.find(val)==set.end()) ;
else
{
cc=1;
set.erase(val);
for(int tv=val+1;;++tv)
{
if(set.find(tv)!=set.end())
{
++cc;
set.erase(tv);
}
else
break;
}
for(int tv=val-1;;--tv)
{
if(set.find(tv)!=set.end())
{
++cc;
set.erase(tv);
}
else
break;
}
longest=std::max(cc,longest);
}
}
);
return longest;
}
};
int main(int argc,char* argv[])
{
int arr[]={100,4,200,1,3,2};
std::vector<int> vec(arr,arr+sizeof(arr)/sizeof(int));
Solution s;
std::cout<<s.longestConsecutive(vec)<<std::endl;
return 0;
}
/*given an unsorted array of integers, find the