LeetCode128——最长连续序列

题目:

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

要求算法的时间复杂度为 O(n)。

示例:

输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

思路:

首先将数组进行升序排序,从第二个数开始比较前一个数和当前的数是不是差1,如果是当前子串的长度加一,并且更新最长子串的长度。边界条件要特别注意,数组为空的时候,返回0。数组大小为1的时候返回1。还要注意最大子串的初始长度要设置为1,因为如果输入的都是相等的数,那么不会进入循环,直接输出初始值1。

https://leetcode-cn.com/problems/longest-consecutive-sequence/solution/zui-chang-lian-xu-xu-lie-by-leetcode/

代码:

class Solution {
public:
	int longestConsecutive(vector<int>& nums) {
		if (nums.size() == 0)
			return 0;
		if (nums.size() == 1)
			return 1;
		int longest_len = 1;
		int current_len = 1;
		sort(nums.begin(), nums.end());
		for (int i = 1; i < nums.size(); i++)
		{
			if (nums[i] != nums[i - 1])
			{
				if (nums[i] == nums[i - 1] + 1)
				{
					current_len += 1;
					longest_len = max(longest_len, current_len);
				}
				else
				{
					current_len = 1;
				}
			}
		}
		return longest_len;
	}
};
发布了269 篇原创文章 · 获赞 3 · 访问量 8434

猜你喜欢

转载自blog.csdn.net/Xiao2018428/article/details/104728866