我的代码当前返回最大子字符串的长度:
for(int i = 1; i<=l-1;i++)
{
counter = 1;
for(int j = 0; j<i;j++)
{
if(seq[j]<seq[j+1])
{
count[j] = counter++;
}
}
}
for(int i = 0;i<l-1;i++)
{
if(largest < count[i+1])
{
largest = count[i+1];
}
}
假设seq是序列中的数字。因此,如果序列是:5; 3; 4; 8; 6; 7,它打印出4.然而,我希望它也打印出3; 4; 6; 7这是最长的按升序存在。< / p>
我试图获取最大子序列本身的长度和实际序列,但我已经有了长度...... 我的直觉是将每个数字存储在数组中,同时计算出计数。因此返回最长的计数,也可以返回附加到它的数组。我认为这可以用哈希表完成,但我不知道如何使用它们。
我只是在寻找提示,而不是答案。
谢谢
答案 0 :(得分:2)
您需要为longest ascending subsequence实现动态编程算法。我们的想法是为每个位置i
存储一对值:
i
-1
。您可以通过将第一对设置为{Length=1, Prior=-1}
,按升序遍历数组,并在索引i
处查找当前项的“最佳”前导来轻松构建这两个数组。前身必须符合以下两个条件:
i
处的项目和以下是数据查找序列的方式:
Index: 0 1 2 3 4 5
Value: 5 3 4 8 6 7
------------ ----------------
Length: 1 1 2 3 3 4
Predecessor: -1 -1 1 2 2 4
完成运行后,找到length
数组中的最大值,并使用前任索引将其链接回开头,直到您点击-1
。