题目:
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
思路:
首先将数组进行升序排序,从第二个数开始比较前一个数和当前的数是不是差1,如果是当前子串的长度加一,并且更新最长子串的长度。边界条件要特别注意,数组为空的时候,返回0。数组大小为1的时候返回1。还要注意最大子串的初始长度要设置为1,因为如果输入的都是相等的数,那么不会进入循环,直接输出初始值1。
代码:
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;
}
};