找到一堆整数中最长的连续子序列,要求O(N)的时间复杂度

找出一堆整数中最长的连续子序列,要求O(N)的时间复杂度!
例如:[5, 6, -2, -4, -1, 6, 7, 12, 8, 4, 3, 11].
这个数列的中,有如下4组连续的子序列:
-1, -2
-4
3, 4, 5, 6, 7, 8
11, 12

所以,很明显最长的连续子序列为:3, 4, 5, 6, 7, 8。

难点在于 要求O(N)的时间内解决问题。所以,不可以先进行排序操作!



------解决方案--------------------
不妨设这个数列没有重复值,否则就用hashtable剔除重复值以后再来计算。
O(n)建立一个hashtable,key是每一个a[i]-1。另外做一个数组b,b[i]意义是每个元素开始的最长递增连续子序列长度。初始化所有b[i]=1。
然后对于每一个a[i],查询a[i]它自己是不是在刚才建立的hashtable里。不在的话那就不需要做什么。在的话,那就递归下去计算b[i]的实际值。并且注意用动态规划的方法来优化(不重复计算已经计算过的b)
这样由于每个b[i]顶多被计算一次,整体复杂度依然是线性。