此题刚看到感觉是不太好做的。但是用哈希表可以很好很快的解决。
首先,用哈希表存所有的数。
对每一个数
x
x
x,如果
x
−
1
x-1
x−1 在哈希表里,跳过。
否则,对这个数开始往后遍历,找到连续序列。
算法结束了,最妙的是,这样是没有重复计算的,即只会遍历第一个开始的数,属于逆向思维题目。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> s;
for(auto num: nums)s.insert(num);
int ans = 0, tmp;
for(auto num: nums)
{
if(!s.count(num-1))
{
tmp = 1;
while(s.count(num+1))
{
num++;
tmp++;
}
if(tmp > ans)ans = tmp;
}
}
return ans;
}
};