目录
题目描述:
给定一个未排序的整数数组,找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
解题思路:
已知一个无序序列,求最长连续序列的长度,肯定先排序,那排序的算法可以直接调用库函数的sort函数。在排序完了以后遍历,如果( a[i]==a[i-1]+1 ),那么长度加一。
坑点:
1.同样的数字不++,序列:5 6 6 7 7 8,最长连续序列长度是4,而非6
代码:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
if(nums.size()==0)
{
return 0;
}
//无序变有序
sort(nums.begin(),nums.end());
//找出最大
int temp=1;
int max=1;
for(int i = 1;i<nums.size();i++)
{
if(nums[i] == (nums[i-1]+1))
{
temp++;
}
else if(nums[i] == nums[i-1])
{
continue;
}
/* else if(max<=temp) //这个之所不行,是因为没有考虑到if的运行用法
{
max=temp;
temp=1;
} */
else
{
if(max<=temp)
{
max=temp;
}
temp=1;
}
}
return max>=temp? max:temp;
}
};