
class Solution
{
public:
int longestConsecutive(vector<int>& nums)
{
sort(nums.begin(), nums.end());
// for (int n : nums)
// cout << n << " ";
// cout << endl;
int length = nums.size();
int max = 0;
if(length==0||length==1) return length;
for (int begin = 0; begin < length-1; begin++)
{
int l = 1;
int i = begin;
for (int j = begin + 1; j < length; j++)
{
if ((nums[i] + 1 )== nums[j] )
{
//cout << i << " " << j << " " << l << " " << nums[i] << " " << nums[j] << endl;
l++;
i++;
// j++; j已经+了没必要+
}
else if (nums[i] == nums[j])
{
i++;
}
else break;
}
if (max < l) max = l;
}
return max;
}
};
依旧复杂度问题
class Solution
{
public:
int longestConsecutive(vector<int>& nums)
{
// if (nums.empty()) return 0; // 处理空数组,避免后续访问越界
// // 用哈希集合去重并加速查找
// unordered_set<int> numSet(nums.begin(), nums.end());
int length = nums.size();
sort(nums.begin(), nums.end());
// 处理特殊情况
if (length <= 1)
{
return length;
}
int max_len = 1; // 最长连续序列长度,至少为1
int current_len = 1; // 当前连续序列长度
// 遍历数组,从第二个元素开始
for (int i = 1; i < length; i++)
{
// 如果当前元素与前一个元素相同,不增加长度
if (nums[i] == nums[i - 1])
{
continue;
}
// 如果当前元素是前一个元素+1,说明连续
else if (nums[i] == nums[i - 1] + 1)
{
current_len++;
// 更新最长长度
if (current_len > max_len)
{
max_len = current_len;
}
}
// 序列中断,重置当前长度
else
{
current_len = 1;
}
}
return max_len;
}
};
class Solution
{
public:
int longestConsecutive(vector<int>& nums)
{
sort(nums.begin(), nums.end());
int length = nums.size();
int max = 1;
if (length == 0 || length == 1) return length;
int begin = 0;
int l = 1;
if (length == 0 || length == 1) return length;
for (int begin = 0; begin < length - 1; begin++)
{
if (nums[begin] + 1 == nums[begin + 1])
{
l++;
if (max < l) max = l;
}
//之前一直是两个if 会导致else会被错误执行
else if (nums[begin] == nums[begin + 1]) continue;
else
{
if (max < l) max = l;
l = 1;
}
}
return max;
}
};
更改的重点是将双重循环改为了单循环
老版本是暴力求结果
新版本是将这一个和前一个进行对比,如果相等就再+1,如果刚刚好大于1就长度+1
