【发布时间】:2022-02-11 16:09:15
【问题描述】:
给定一个数组流,对于每个元素,我们必须找到迄今为止最长的连续子序列
例如:
10 -> 1
12 -> 1
11 -> 3 (10,11,12)
20 -> 3
我的想法:创建一个集合,并为每个传入号码检查它是否是 LCS 的开始/结束。取最大可能的长度。
既然是 O(N^2),有没有办法降低 TC?我不需要代码,只是一种优化算法的方法
【问题讨论】:
-
@MrSmith42 不,所有整数都是可能的
-
如果您将每个传入号码
x视为一个区间[x, x+1],您可以使用数据结构来存储最大不相交区间,如 in this post. 所解释的那样,他们推荐使用区间树,它使用平衡BST 在每次操作的O(log n)时间内解决此问题。您只需要存储最大间隔长度即可。 -
11 -> 3 (10,11,12) ,不应该是 10,12,11 吗?我完全不明白这个例子
-
顺序无所谓