最长递增子序列

子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

动态规划

用1填充出长度等同于给定数组的数组dp,用于记录执行到某个位置时的最大长度。

循环1从1开始遍历数组,循环2从0开始遍历到i-1,假设前i-1个数都已经得出解。

假如array[i]大于array[j],那么说明array[i]可以接在之前已经得出的解的后边。

循环2遍历时,需要判断当前得出解与历史得出最高解的大小,即为max($dp[$i],$dp[$j]+1)。

        $array = [0,3,1,6,2,2,7];
        $array = [100,101,102,103,104,1,2,3,4,5,6,7,8,9];
        $n = count($array);
        $dp = array_fill(0,$n,1);
        for($i=1;$i<$n;$i++){
            for($j=0;$j<$i;$j++){
                if ($array[$i]>$array[$j]){
                    $dp[$i] = max($dp[$i],$dp[$j]+1);
                }
            }
        }
        print_r(max($dp));

 

 

 

posted @ 2023-07-21 10:54  知冷知热  阅读(17)  评论(0)    收藏  举报