题目描述:给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n) 的算法解决此问题。
实现步骤:
1. 将nums中的所有数字加入set
2. 遍历set中的每个数字x
3. 如果set中不存在x-1,说明x可能是某个连续序列的第一个数字
4. 从x+1开始查找set中是否存在连续的数字,如果存在就增加curlen和i,继续查找
5. 更新ans,保持最长连续序列的长度
6. 返回ans
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int ans=0; // 记录最长连续序列的长度
unordered_set<int> se; // 哈希表,存储所有数字
for(auto &x:nums){
// 遍历nums,将所有数字加入set
se.insert(x);
}
for(auto &x:se){ // 遍历set中的每个数字
// 如果set中不存在x-1,说明x可能是某个连续序列的第一个数字
if(se.find(x-1)==se.end()){
int curlen=1; // 此连续序列的当前长度,初始化为1
int i=x+1; // 从x+1开始查找
while(se.find(i)!=se.end()){
// 只要set中存在i,就增加i和curlen,继续查找
i++;
curlen++;
}
// 更新ans,保持最长连续序列的长度
ans=max(ans,curlen);
}
}
return ans;
}
};