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.
思路就是把所有数存到map中,遍历数组每一个值,然后向左右找,再把两边的位置相减!
有一个关键是,每次找到,需要把map中这个元素删掉,这样避免之后重复查找!*****一旦要求时间,就想到空间换时间,用map查找快!
class Solution {
public:
int longestConsecutive(vector<int>& nums)
{
map<int,int> nummap;
for (auto it : nums)
nummap[it]++;
int ret = 0;
for(auto i : nums)
{
//l
int _l = i - 1;
while(1)
{
if (nummap.find(_l) != nummap.end())
nummap.erase(_l--);
else
break;
}
//r;
int _r = i + 1;
while(1)
{
if (nummap.find(_r) != nummap.end())
nummap.erase(_r++);
else
break;
}
ret = max(_r - _l - 1, ret);
}
return ret;
}
};