原题链接:128.最长连续序列
解题方法
1、首先遍历一遍数组,用个哈希表存该节点(表示这个节点存在),
2、然后遍历一遍哈希表,将所有左端点(左边不存在相邻节点)保存在一个列表,
3、最后遍历一遍左端点列表,循环判断每个节点的右相邻节点是否存在(通过哈希表)记录该序列长度。
复杂度
时间复杂度:
O ( n ) O(n) O(n)
空间复杂度:
O ( n ) O(n) O(n)
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int res=0;
unordered_map<int,bool>existMap;// 表示一个节点是否存在
for(auto x:nums){
existMap[x]=1;
}
vector<int>points;// 存所有左端点,即只有一个相邻节点的点
for(auto kv:existMap){
// 存所有左端点(左边不存在相邻节点)
if(existMap.find(kv.first-1) == existMap.end())
points.emplace_back(kv.first) ;
}
int tmp=0,ans=0;
for(auto x:points){// 从每个左节点开始,一直寻找他右相邻节点是否存在
ans++;
tmp = x + 1;
while(existMap.find(tmp) != existMap.end()){
ans++;// 计算序列长度
tmp++;
}
if(ans>res)res=ans;
ans=0;
}
return res;
}
};