思路:
开一个哈希表,存nums的所有元素,然后找到每段子序列的头元素,开始统计长度,统计的时候需要删除哈希表中的元素,这样可以保证只遍历一次,算法是O(n)的。
代码:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_set<int> h;
for(auto x:nums) h.insert(x);
int res=0;
for(int i=0;i<nums.size();i++){
if(h.count(nums[i]) && !h.count(nums[i] - 1)){
int y=nums[i];
h.erase(nums[i]);
while(h.count(y+1)){
h.erase(y);
y++;
}
res=max(res,y-nums[i]+1);
}
}
return res;
}
};
评论区