如何找到最长增长子序列的最后一个元素和第一个元素之间的差异,使得LIS中(最后一个元素 - 第一个元素)的值最大?
答案 0 :(得分:1)
让我们使用标准的动态编程解决方案,我们将f[i]
定义为i-th
元素中以最长的增长子序列结束。我们可以为每个(max length, smallest first element)
存储一对i
。可以证明它导致了正确的全局解决方案(直观地说,它是正确的,因为它仍然存储了以特定元素结尾的所有子序列的最佳解决方案,以及一个前缀是"更好"比另一个意味着整个子序列更好)。
如果性能要求很高,您还可以通过将这些对存储在高效的数据结构(如段树)中来使其成为O(N log N)
。
答案 1 :(得分:0)
非常天真的算法如下:
所有这些都在O(n)中,可以一次完成。为了简化它,我将其分解为两个步骤。