描述
给定无序数组arr,返回其中最长的连续序列的长度(要求值连续,位置可以不连续,例如 3,4,5,6为连续的自然数)
数据范围: 1≤n≤10 ^5
,数组中的值满足 1≤val≤10 ^8
要求:空间复杂度 O(n),时间复杂度 O(nlogn)
示例1
输入:[100,4,200,1,3,2]
返回值:4
示例2
输入:[1,1,1]
返回值:1
备注:
1≤n≤10^5
1≤arr_i≤10^8
思路:先排序,然后连续的可用一个值记录其长度,如果不连续则将后一个值看作第一个值,再去判断连续。存的为记录值与已经比较过的长度最大值。
注意:由于可能出现【1,2,2,3,4】因此相等时直接进入下一轮循环,不用将长度置为1。
import java.util.*;
public class Solution {
/**
* max increasing subsequence
* @param arr int整型一维数组 the array
* @return int整型
*/
public int MLS (int[] arr) {
// write code here
Arrays.sort(arr);
int length = 0;
int record = 1;
for (int i = 0; i < arr.length-1; i++) {
if(arr[i+1]==arr[i]+1){
record++;
}
else if(arr[i+1]==arr[i]) continue;
else record=1;
length = Math.max(length,record);
}
return length;
}
}