【最长连续序列问题】
来源:互联网 发布:软件测试薪资到底怎样 编辑:程序博客网 时间:2024/05/02 00:34
给定一个未排序的整数数组,求最长的连续序列的长度。要求算法的时间复杂度在XP系统下载O(n)
比如对于数组[100, 4, 200, 1, 3, 2],其中最长序列为[1,2,3,4],所以应该返回4
public class Solution {
public int longestConsecutive(int[] num) {
//write your code here
}
}
解法思路:
因为要求xp系统之家复杂度是O(n),可以考虑使用哈希表进行查询。使用两个装机常用网络软件HashMap分别记录序列的开始值和结束值。遍历数组,如果发现比该元素大1的开始值或者比改元素小1的结束值,均进行合并工作。
不多说了,看代码。
private static class Sequence{
int start;
int end;
int length;
}
public int longestConsecutive(int[] num) {
int len =0;
if(num==null || (len=num.length)<1){
return 0;
}
Map<Integer,Sequence> start = new HashMap<Integer,Sequence>();
Map<Integer,Sequence> end = new HashMap<Integer,Sequence>();
int maxLength = 0;
for(int i=0;i<len;++i){
Sequence s = null;
int v = num[i];
if(start.containsKey(v) || end.containsKey(v)){
continue;
}
if(start.containsKey(v+1)){
s = start.remove(v+1);
s.start = v;
++s.length;
while(end.containsKey(s.start-1)){ //merge ends
Sequence m = end.remove(s.start-1);
start.remove(m.start);
s.start = m.start;
s.length += m.length;
}
start.put(s.start, s);
}
else if(end.containsKey(v-1)){
s = end.remove(v-1);
s.end = v;
++s.length;
while(start.containsKey(s.end+1)){ //merge starts
Sequence m = start.remove(s.end+1);
end.remove(m.end);
s.end = m.end;
s.length += m.length;
}
end.put(s.end, s);
}
else{
s = new Sequence();
s.start = s.end = v;
s.length = 1;
start.put(v,s);
end.put(v,s);
}
//System.out.println(i+" "+v+" seqence:"+s.start+"/"+s.end+"/"+s.length);
if(maxLength<s.length){
maxLength = s.length;
}
}
return maxLength;
}
- 【最长连续序列问题】
- 连续正面的最长序列问题
- 最长连续序列
- 最长连续序列
- 最长连续序列
- 连续最长子序列
- 最长连续子序列
- 最长连续序列
- 最长连续序列
- lintcode ----最长连续序列
- 最长连续序列长度
- 最长连续子序列
- LintCode:最长连续序列
- LintCode-最长连续序列
- 最长连续序列
- LintCode : 最长连续序列
- 最长连续序列
- 最长连续序列
- volatile关键字作用
- Java基础04:选择排序;冒泡排序;折半查找;二位数组
- 64位 2008 配置 iis asp.net 提示 system.data.sqllite
- vc2010+openCV1.0实现将指定目录下的所有jpg文件缩放后存放到目标文件夹
- Oracle BI Delivers 概述
- 【最长连续序列问题】
- POJ 3087 Shuffle'm Up
- Codeforces Round #197(div 2)
- xcode中文件变红色的另类原因
- pat 1012. The Best Rank (25)
- linux常用命令—alaric珍藏版
- Linux内核中的Kconfig、Makefile、.config
- iOS开发之 Json解析的四种方法
- 深入研究 C++中的 STL Deque 容器