https://leetcode-cn.com/problems/longest-consecutive-sequence/
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
- 用哈希表存储每个端点值对应连续区间的长度
- 若数已在哈希表中:跳过不做处理
- 若是新数加入:
取出其左右相邻数已有的连续区间长度
计算当前数的区间长度
根据当前区间长度更新最大长度的值
更新区间两端点的长度值
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
unordered_map<int,int> ma;
int ans=0;
for(int i=0;i<nums.size();i++){
int t=nums[i];
if(!ma[t]){
int l=ma[t-1],r=ma[t+1];
ma[t]=ma[t+r]=ma[t-l]=l+r+1;
ans=max(ans,ma[t]);
}
}
return ans;
}
};