这个题的思路很简单,将所有数字压入set集合,set集合会自动排序,并且删除多余的数,接着遍历集合,用变量记录最长子序列的长度,上一个数的值,然后比较,看看这个数能否和上一个数构成一个子序列,如果可以,则记数加一,不行则更新记录子序列长度的变量值为1。
class Solution {
public:
int longestConsecutive(vector<int>& nums) {
if (nums.size() == 1)return 1;//单个元素
if (nums.size() == 0)return 0;//判断为不为空
set<int>s;
for (auto q : nums)
{
s.insert(q);//将全部元素压入set集合
}
int i = 0;//记数变量.\,跳过第一个元素
int v = 0;//记录上一个变量
int res = 1;//初始化为一,因为最短的为一
int ans = 1;//记录答案
int mr = 0;
for (auto w : s)
{
if (i != 0)
{
if ((v + 1) == w)//表示连续
{
res++;
ans = max(ans, res);
}
else {
res = 1;
}
}
v = w;//存储上一个元素
i = 1;
}
return ans;
}
};