【问题标题】:Longest increasing subsequence with K exceptions allowed允许有 K 个例外的最长递增子序列
【发布时间】:2019-05-15 18:46:10
【问题描述】:

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

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

【问题讨论】:

标签: subsequence


【解决方案1】:

您可以设置 k 个计数器并遍历序列。一旦你遇到一个例外,你就去下一个柜台。如果您到达第 k+1 个计数器,则删除第一个计数器并将所有计数器移动一位,以便第 n+1 个计数器变为第 n 个。在每一步中,您都将当前索引与您的 k 个计数器的总和一起存储为总序列长度。最后取最大值

说明: 问题只是最长的子序列从哪里开始。如果您知道您知道它是多长时间(直到 k+1)异常或序列结束)。设该点为 s。 最长的子序列只能开始于异常或序列的开头。如果不是,您可以将 s-1 项目添加到序列中而不添加异常并形成更长的子序列。 上面的方法计算所有可能的最长子序列,最后选择最长的候选。

【讨论】:

  • 这仅适用于连续子序列对吧?不连续怎么办?
  • 这个答案似乎不正确。似乎误解了这个问题。该问题询问子序列(不一定是连续的;可能有间隔)。如果我们想要一个连续的子序列,你的答案会起作用,但它不适用于问题中所述的问题。我鼓励您删除您的答案以避免混淆人们并避免将此问题标记为“已回答”。
猜你喜欢
  • 2020-04-15
  • 2013-04-30
  • 2013-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多