使用hash set,首先将数组中的所有元素添加到set中,然后针对数组中的每一个元素进行查找:如果该元素在set中,则从该元素向左右扫描,从set中移除最长的连续序列,并记录长度。直到碰到不连续为止。代码如下:
class Solution {
public:
int longestConsecutive(vector<int> &num) {
unordered_set<int> set;
for(auto i: num)
set.insert(i);
int maxlen = 0;
for(auto i: num)
{
if(set.find(i) == set.end())
continue;
int left = i-1;
int right = i+1;
int count = 1;
set.erase(i);
while(set.find(right) != set.end())
{
set.erase(right);
count++;
right++;
}
while(set.find(left) != set.end())
{
set.erase(left);
count++;
left--;
}
maxlen = max(maxlen, count);
}
return maxlen;
}
};
参考: http://discuss.leetcode.com/questions/1070/longest-consecutive-sequence