记录12.29
给定一个未排序的整数数组 nums
,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。
请你设计并实现时间复杂度为 O(n)
的算法解决此问题。
示例 1:
输入:nums = [100,4,200,1,3,2]
输出:4
解释:最长数字连续序列是 [1, 2, 3, 4]。它的长度为 4。
老规矩,先放题解:
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
int i=0;
sort(nums.begin(),nums.end());
int count=1;
int max=1;
if(nums.size()==0)
{
return 0;
}
if(nums.size()==1)
{
return 1;
}
for(int i=0;i<nums.size()-1;i++)
{
if(nums[i]+1==nums[i+1])
{
count++;
}
else if(nums[i]==nums[i+1])
{continue;}
else{
if(max<count)
{
max=count;
}
count=1;
}
}
if(max<count)
{
max=count;
}
return max;
}
};
拿到题目后,第一个想法就是先排序,之后设置一个最大值和count计数变量,从头开始循环遍历,如果前一项等于后一项就++,不等就进行与max比较保留最大数,要注意空数组是0,之后编译的时候发现是有误即12234这种,应该进行去重,这里直接采用了continue略过该循环,最后就会得出答案。