您的位置:首页 > 其它

数组中的最长连续序列

2017-12-23 10:56 169 查看


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));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息