【发布时间】:2013-11-22 03:49:00
【问题描述】:
我得到一个随机长度的数字序列,由 0、1、2 组成:
201102220221
我还得到了一个数字:1 或 2。我只能循环遍历序列一次,我需要识别给定数字的所有子序列,运行值通过另一个函数并将该值添加到总和(初始化为 0)。
任何 0 都可以替换为 1 或 2。因此可以通过将旁边的 0 替换为数字来“扩展”子序列。如果一个子序列不能扩展到最小长度超过4,我需要丢弃它。
例如,假设给定序列:
11011002102
和数字 1。我在开头标识长度为 2 的子序列(参见第一个元素)。通过将第一个 0、第三个和第四个零替换为 1,它可以扩展为长度为 7 的子序列。因此,我通过一个函数运行它的当前长度并将其添加到总和中。
sum += function(2);
然后我确定 1 的下一个子序列(参见第四个元素)。它目前的大小为 2,通过替换它周围的零,可以扩展到最大大小为 7。所以我将它的长度传递给一个函数并将其添加到总和中。
sum += function (2);
我终于确定了 1 的最后一个子序列(见第六个元素)。它目前的长度为 1,可以通过将其旁边的零替换为小于 4 的 1 来扩展为最大大小为 2,因此我将其丢弃。
有人可以帮我编写一个函数,通过只循环一次序列来完成上述操作。 请不要给我真正的代码,只是想法、建议或伪代码。
我没有任何工作要分享,我完全迷失了。我也不知道算法,所以请不要开始谈论动态规划或线性规划之类的东西,而是解释解决问题的可能方法。
【问题讨论】:
-
也许您不应该使用 sequence 这个词来表示随机生成的数字和连续的相同数字。有点混乱。
-
@Laksa “子序列”怎么样?
-
经典dp 问题。从你所知道的开始,并通过跟踪你以前得到的东西来扩展。提示:您只关心您要查找的数字和任何零
标签: algorithm computer-science