数组中的最长连续序列 import java.util.*;
//数组中的最长连续序列
public class LongestSequence{
//最长的连续序列
public static int longestConsecutive(int[]arr)
{
if(arr==null||arr.length==0)
{
return 0;
}
int max=1;
//key 表示遍历的某个数 value表示最长连续序列的长度
HashMap<Integer,Integer>map=new HashMap<Integer,Integer>();
for(int i=0;i<arr.length;i++)
{
if(!map.containsKey(arr[i]))
{
map.put(arr[i],1);
if(map.containsKey(arr[i]-1))
{
max=Math.max(max,merge(map,arr[i]-1,arr[i]));
}
}
if(map.containsKey(arr[i]+1))
{
max=Math.max(max,merge(map,arr[i],arr[i]+1));
}
}
return max;
}
//左右位置的长度合并
public static int merge(HashMap<Integer,Integer>map,int less,int more)
{
int left=less-map.get(less)+1;
int right=more+map.get(more)-1;
int len=right-left+1;
map.put(left,len);
map.put(right,len);
return len;
}
public static void main(String[]args)
{
int arr[]={100,4,200,1,3,2};
System.out.println(longestConsecutive(arr));
}
}
数组中的最长连续序列