知识大全 最长连续序列问题

Posted 序列

篇首语:欠伸展肢体,吟咏心自愉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 最长连续序列问题相关的知识,希望对你有一定的参考价值。

  问题

  给定一个未排序的整数数组 求最长的连续序列的长度 要求算法的时间复杂度在O(n)

  比如对于数组[ ] 其中最长序列为[ ] 所以应该返回

  public class Solution

  public int longestConsecutive(int[] num)

  //write your code here

  

  

  解法思路

  因为要求复杂度是O(n) 可以考虑使用哈希表进行查询 使用两个HashMap分别记录序列的开始值和结束值 遍历数组 如果发现比该元素大 的开始值或者比改元素小 的结束值 均进行合并工作

  不多说了 看代码

  private static class Sequence

  int start;

  int end;

  int length;

  

  public int longestConsecutive(int[] num)

  int len = ;

  if(num==null || (len=num length)< )

  return ;

  

  Map<Integer Sequence> start = new HashMap<Integer Sequence>();

  Map<Integer Sequence> end = new HashMap<Integer Sequence>();

  int maxLength = ;

  for(int i= ;i<len;++i)

  Sequence s = null;

  int v = num[i];

  if(ntainsKey(v) || ntainsKey(v))

  continue;

  

  if(ntainsKey(v+ ))

  s = start remove(v+ );

  s start = v;

  ++s length;

  while(ntainsKey(s start )) //merge ends

  Sequence m = end remove(s start );

  start remove(m start);

  s start = m start;

  s length += m length;

  

  start put(s start s);

  

  else if(ntainsKey(v ))

  s = end remove(v );

  s end = v;

  ++s length;

  while(ntainsKey(s end+ )) //merge starts

  Sequence m = start remove(s end+ );

  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 = ;

  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;

cha138/Article/program/Java/hx/201311/26932

相关参考

知识大全 出栈序列的研究[7]

判断一个序列是否为出栈序列随着n的变大出栈序列总数越来越多由文献[]和[]可知出栈序列的求解问题是一个NP问题所以判断一个序列是否为一个出栈序列更为重要在文献[]的传统算法中根据栈的定理[]判断某一序

知识大全 数据结构复习总结第四章串

  第四章串  串及其运算  串的基本概念  串是由零个或多个字符组成的有限序列;  包含字符的个数称串的长度;长度为零的串称空串;由一个或多个空格组成的串称空白串;  串中任意个连续字符组成的子序列

知识大全 09年自考《数据结构》各章要点一[8]

  第四章串  串是零个或多个字符组成的有限序列  ·空串是指长度为零的串也就是串中不包含任何字符(结点)  ·空白串指串中包含一个或多个空格字符的串  ·在一个串中任意个连续字符组成的子序列称为该串

知识大全 牙齿问题

牙齿问题其实您到正规的牙科机构尽早做全口牙齿的检查,确定一个序列治疗方案,配合您的牙医一步步进行,所有的问题就解决了。您不用这么纠结,牙齿的问题是要具体治疗的,不能拖时间把小问题变成大问题,到最后牙齿

知识大全 JSON序列化与反序列化

JSON序列化与反序列化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!以下是对JSON序列化与反序

咋实现棉花的稳产高产?

棉花能不能实现稳产高产和持续生产?从国欣种业的科技园区看,可以得出肯定的答案。坐落在河间市城南的1千多亩科技园区已连续植棉10年以上,最长的已连作20年。至今保持住较好的长势和较高的产量水平,基本上控

咋实现棉花的稳产高产?

棉花能不能实现稳产高产和持续生产?从国欣种业的科技园区看,可以得出肯定的答案。坐落在河间市城南的1千多亩科技园区已连续植棉10年以上,最长的已连作20年。至今保持住较好的长势和较高的产量水平,基本上控

知识大全 数据结构考研分类复习真题 第十章 排序[42]

  .算法模拟(分问题各分问题占分)  设待排序的记录共个排序码分别为  ()用直接插入排序试以排序码序列的变化描述形式说明排序全过程(动态过程)要求按递减顺序排序  ()用直接选择排序试以排序码序列

知识大全 datatable序列化与反序列化

   //datatable序列化      publicstringgetSendDetailQuery(D

试述组成染色体DNA的三种功能元件分别是什么并论述其主要功能

a.自主复制DNA序列:DNA复制的起点确保chr在细胞膜周期中能够自我复制,为顺式作用元件的一种,从而保护chr在世代传递中具有稳定性和连续性。  b.着丝粒DNA序列:与染色体的分离有关,是两个相