以下代码遍历列表一次并找到 LIS。我不明白为什么 DP 算法应该采用 O(n2)。
//C
int lis(int *a, int l){
if(l == 0) return 1;
else if(a[l] > a[l - 1]) return 1 + lis(a, l - 1);
else return lis(a, l - 1);
}
int main(){
int a[] = { 10, 22, 9, 33, 21, 50, 41, 60 };
cout << lis(a, sizeof(a)/sizeof(a[0]) - 1);
}
% erlang
lis([_H]) -> 1;
lis([H1, H2 |T]) when H1 > H2 -> 1 + lis([H2|T]);
lis([_H|T]) -> lis(T).
main() -> lis(lists:reverse([ 10, 22, 9, 33, 21, 50, 41, 60 ])).