题目说明
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
链接:https://leetcode-cn.com/problems/longest-consecutive-sequence
分析:本题降低时间复杂度的关键是:1,使用哈希表的结构 2.针对不同的序列计算,已经计算的序列及时的剪枝
int longestConsecutive(vector<int>& nums)
{
if (nums.size() < 2)
{
return nums.size();
}
unordered_set<int> m_nums(nums.begin(),nums.end());
int res = 0;
for (auto num : nums)
{
if (m_nums.count(num - 1) == 0) //去除已经计算的序列
{
int x = num + 1;
int curnum = 1;
while (m_nums.count(x))
{
x++;
curnum++;
}
res = max(res,curnum);
}
}
return res;
}