保留一个向量“v[x] = y”,其中 y 是原始序列的最小元素,它给出了长度为 x 的最长递增子序列。原来你只有v[0] = -inf
.
遍历一个元素的序列,使用二进制搜索a
在向量中查找它。v
你不会找到a
确切的,而是最大x
的v[x] <= a
(<如果它严格增加)。因此,以 a 结尾的最长递增子序列将是 length x+1
。现在更新v[x+1]
为 a(它不能小于 a,否则您的搜索应该有 return x+1
),您可能需要扩展向量。
LIS 的长度是向量的大小。如果您需要重建解决方案,请跟踪您使用的位置。