209.(126)最长连续序列

it2024-05-08  47

题目描述:

给定一个未排序的整数数组,找出最长连续序列的长度。

要求算法的时间复杂度为 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%的用户

最新回复(0)