思路:要求O(N),无法使用排序,一般都需要用到哈希。我们现在遍历输入元素的时候,如果可以很快的找到其前一个和后一个数(对于3来说是2和4),那么我们只要向前和向后遍历即可,为了防止重复遍历可以标记已经访问过的元素。
class Solution {
public:
int longestConsecutive(vector<int> &num) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
unordered_set<int> arr;
int ret = 1;
for(vector<int>::size_type i = 0; i < num.size(); ++i)
arr.insert(num[i]);
for(vector<int>::size_type i = 0; i < num.size(); ++i)
{
if(arr.count(num[i]) == 0) continue;
int ans = 1;
int next = num[i] - 1;
while(arr.count(next) != 0)
{
arr.erase(next--);
ans++;
}
next = num[i] + 1;
while(arr.count(next) != 0)
{
arr.erase(next++);
ans++;
}
arr.erase(num[i]);
ret = max(ans, ret);
}
return ret;
}
};