数组中的最长连续序列
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));
}
}
相关文章推荐
- 编程实现:从字符中获取连续数组序列,如字符串"a1dl2iad9j3la5kudp7u9pn4blj8ap5u3e6ml9a"中可以得到的连续数字序列为1234556.【注】:只考虑一位,因此最长的数
- 获取一个数组中最长的连续的元素序列。例如,给定了[31,6,32,1,3,2],最长的连续的元素序列是[1,2,3],返回其长度3
- longest-consecutive-sequence,数组中最长的连续序列
- 128.LeetCode Longest Consecutive Sequence(hard)[数组 排序 最长连续增长子序列]
- 递归与动态规划---数组中的最长连续序列
- 程序员面试题目总结--数组(26)【最长连续序列】
- 无序数组中最长连续序列
- JavaScript实现找出数组中最长的连续数字序列
- 数组中的最长连续序列---dp实现
- 数组最长连续递增(+1)子序列
- 数组的最长连续的序列
- 数组中最长的连续序列(longest consecutive sequence)
- 找出数组中最长的连续数字序列(JavaScript实现)
- 求数组中最长的连续序列(Longest Consecutive Sequence )
- 数组——数组中最长连续序列
- 给定一个长度为N的数组,找出一个最长的单调自增子序列(不一定连续,但是顺序不能乱).
- 数组中最长连续序列
- O(n)时间找出无序数组中最长的连续递增序列
- 数组中的最长连续序列
- 128. Longest Consecutive Sequence *HARD* -- 寻找无序数组中最长连续序列的长度