最长递增子序列
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[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));

浙公网安备 33010602011771号