function LIS(str1){
return LISUtil(str1, 0);
function LISUtil(str1, index){
if(index == str1.length){
return 0;
}
var min = str1[index],
len = 1;
for(let i=index+1; i<str1.length; i++){
if(min < str1[i]){
len++;
min = str1[i];
}
}
return Math.max(len, LISUtil(str1, index+1));
}
}
这是我提出的最长的后续序列(是的,它看起来很奇怪,但请暂时忽略它!)。
我读过LIS的运行时复杂度为2 ^ n。使用DP,您可以将其设为n ^ 2.
当我想到并尝试我的LIS功能时,我确信它在n ^ 2中运行。它经过n,每个索引被检查O(n)次 - &gt; N ^ 2
我运行了一些测试用例,它确实正确返回。但是我没有使用过DP ......这意味着它必须是这两个中的任何一个。
有人能帮助我理顺我的想法吗? 我的函数是错误的,是运行时2 ^ n,还是可以在没有DP的情况下获得LIS?
答案 0 :(得分:0)
它没有获得LIS。例如,
LIS([1, 6, 2, 3, 7, 4, 5])
返回3.应为4。