46.数组中最长的连续子序列
题目描述
给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)
输入
[100,4,200,1,3,2]
返回值
4
输入
[1,1,1]
返回值
1
分析
1.由题意可得,重复的元素不计,所以我们采取Set方法,自动去重
2.然后继续比较,如果集合包含当前元素+1后的元素,就给计数器++;
3.直到遍历完整个集合,这样就可以获取到最长连续的子序列
代码实现
import java.util.*;
public class Solution {
/**
* max increasing subsequence
* @param arr int整型一维数组 the array
* @return int整型
*/
public int MLS(int[] arr) {
if (arr.length == 0) {
return 0;
}
int n = arr.length;
int max = 1;
Set<Integer> set = new HashSet<>();
for (int num : arr) {
set.add(num);
}
for (int num : arr) {
if (set.contains(num - 1)) {
continue;
}
int start = num;
while (set.contains(start + 1)) {
start++;
}
max = Math.max(max, start - num + 1);
}
return max;
}
}