【发布时间】:2012-10-08 13:18:49
【问题描述】:
我们如何在 O(n log n) 时间内找到从数组的每个位置开始的最长递增子序列,我已经看到了找到在数组的每个位置结束的最长递增序列的技术,但我找不到反过来。
例如 对于序列“ 3 2 4 4 3 2 3” 输出必须是“2 2 1 1 1 2 1”
【问题讨论】:
-
第一个输出不应该是1吗?
-
@leppie 抱歉它应该是子序列,所以 3,4 是有效的子序列
-
@quasiverse 你能详细说明如何倒退吗?
-
反转数组;找到在每个位置结束的 LIS(这可以在 O(n) 时间内完成);反转结果。
-
@j_random_hacker:你确定它可以在 O(n) 时间内完成吗?如果他询问的是连续子序列,那将是微不足道的,但他需要一般的 LIS,如果有记忆的话,它是 O(n log n)。
标签: algorithm optimization data-structures sequence dynamic-programming