LeedCode_最长连续序列

题目说明

给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 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;
}
发布了63 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/luncy_yuan/article/details/104196254
今日推荐