NC95 数组中的最长连续子序列
知识点并查集数组
描述
给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)
数据范围: ,数组中的值满足
要求:空间复杂度 ,时间复杂度
示例1
输入:
[100,4,200,1,3,2]
返回值:
4
示例2
输入:
[1,1,1]
返回值:
1
题解
排序+统计
思路:
先将数组排序,然后统计连续的数字。注意,如果连续的2个数字相等,此时不应该重置连续长度。
和该解法类似的还有使用set存放所有元素然后进行统计,或者使用hash表统计~~
代码如下:
#include <bits/stdc++.h>
using namespace std;
int MLS(vector<int> &arr)
{
if (arr.size() <= 1)
{
return arr.size();
}
std::sort(arr.begin(), arr.end());
int ans = 1;
int len = 1;
for (int i = 1; i < arr.size(); ++i)
{
if (arr[i - 1] + 1 == arr[i])
{
len++;
ans = std::max(len, ans);
continue;
}
else if (arr[i - 1] == arr[i])
{
continue;
}
else
{
len = 1;
}
}
return ans;
}