允许K例外的最长递增子序列

时间:2019-05-15 18:46:10

标签: subsequence

你好,我坚持做我的作业:给定整数序列,找到元素按升序排列的最长子序列。最多k个异常意味着最多k次,序列中的下一个数字小于前一个。输出应该是最长的子序列的长度。

我发现了很多找到LIS的例子,甚至有一个允许更改一次,但是我不知道如何检查k个更改。以下是发布更改后的链接:https://www.geeksforgeeks.org/longest-increasing-subarray-with-one-change-allowed/amp/

1 个答案:

答案 0 :(得分:1)

您可以设置k个计数器并遍历序列。一旦遇到异常,您将转到下一个柜台。如果到达第k + 1个计数器,则将第一个计数器丢弃,并将所有计数器都移位一个,以使第n + 1个计数器变为第n个计数器。在每一步中,您都将当前索引与k个计数器的总和一起存储为总序列长度。最后取最大的

说明: 问题仅是最长子序列从何处开始。如果您知道异常持续多久(直到k + 1为止)或序列结束)。让这一点成为s。 最长的子序列只能在异常或序列开始时开始。如果不是,您可以在序列中添加s-1项而无需添加例外,并形成更长的子序列。 上面的方法计算所有可能的最长子序列,最后选择最长的候选者。