我们有一个整数数组。我们想知道每个元素是否至少包含在我们数组的许多LIS的LIS中。我们想知道数组中所有元素的数据都小于 O(n 2 )。
例如,数组[2,4,3,2,5]有两个LIS。数组中的所有元素都属于这些LIS中的至少一个,除了不属于任何LIS的 4 th 元素。
我知道一个使用dfs的简单解决方案,但其运行时为 O(n 2 )。
答案 0 :(得分:0)
运行诸如https://en.wikipedia.org/wiki/Longest_increasing_subsequence#Efficient_algorithms之类的算法,该算法在每个点计算在该点结束的最长增长子序列的长度。
使用相反的数据运行相同的算法,为每个点计算从该点开始的最长增长子序列的长度。
对于每个点,添加两个计算长度。如果此总和等于找到的最大总和,则该点是最长的增加子序列。
引用的算法每次传递需要时间O(n log n),且总和仅为O(log n),因此总数为O(n log n)