您的位置:首页 > 其它

最长连续序列(算法)

2015-09-03 09:38 411 查看
给出一个无序的整形数组,找出最长连续元素的长度。时间复杂度要求在线性时间内。

eg: 输入{8,1,9,3,2,4},那么其最长连续序列是{1,2,3,4},即输出长度为4.

public int findLongestConsequence(int [] A)
{
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
int max = 1;
for(int i : A)
{
if(map.containKey(i) ) continue;
map.put(i,1);
if(map.containKey(i - 1))
max = Math.max(max,merge(map,i - 1,i);
if(map.containKey(i + 1))
max = Math.max(max,merge(map,i, i + 1));
}
return max;
}
private int merge(HashMap<Integer,Integer> map,int left,int right)
{
int upper = right + map.get(right) - 1;
int lower = left  - map.get(left) + 1;
int len = upper - lower + 1;
map.put(upper,len);
map.put(lower,len);
return len;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: