题目描述:
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
思路:
用哈希表存储每个端点值对应连续区间的长度若数已在哈希表中:跳过不做处理若是新数加入:
取出其左右相邻数已有的连续区间长度 left 和 right计算当前数的区间长度为:cur_length = left + right + 1根据 cur_length 更新最大长度 max_length 的值更新区间两端点的长度值
代码:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
if(nums.size()==0)return 0;
int res=0,curr,left,right;
unordered_map<int,int>m;
for(auto&i:nums)
{
curr=i;
if(m[curr]==0)
{
if(m[curr+1]==0)right=0;
else right=m[curr+1];
if(m[curr-1]==0)left=0;
else left=m[curr-1];
res=max(res,right+left+1);
m[curr]=right+left+1;
m[curr+right]=m[curr-left]=m[curr]=right+left+1;
}
}
return res;
}
};
执行效率:
执行用时:28 ms, 在所有 C++ 提交中击败了30.39%的用户
内存消耗:10.6 MB, 在所有 C++ 提交中击败了59.43%的用户