class Solution {
public:
int longestConsecutive(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
int maxLen = 0;
map<int, pair<int, int> > m_map;
for (vector<int>::iterator iter = num.begin(); iter != num.end(); ++iter)
{
if (m_map.count(*iter) == 0)
{
m_map.insert(make_pair(*iter, make_pair(*iter, *iter)));
}
}
map<int, pair<int, int> >::iterator iter;
for (iter = m_map.begin(); iter != m_map.end(); ++iter)
{
int val = iter->first;
map<int, pair<int, int> >::iterator iter1 = m_map.find(val - 1);
if (iter1 != m_map.end())
{
iter->second.first = iter1->second.first;
}
iter1 = m_map.find(val + 1);
if (iter1 != m_map.end())
{
iter->second.second = iter1->second.second;
}
maxLen = max(maxLen, iter->second.second - iter->second.first + 1);
}
return maxLen;
}
};