package leecode;
/**
 * 最长递增子序列
 * 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。
 *
 * 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列
 *
 *
 * @author Tang
 * @date 20210907
 */
public class MaxLengthChild {
    int[] tables;
   
   /**
    动态规划
   */
    public int execute(int[] nums) {
        //构建备忘录
        tables = new int[nums.length];
        //倒序数组
        for(int i = nums.length - 1; i >= 0; i--){
            if(i == nums.length - 1) {
                tables[i] = 1;
            }
            int maxValue = 0;
            for(int j = i+1; j < nums.length; j++) {
                if(nums[i] < nums[j]) {
                    maxValue = Math.max(tables[j], maxValue);
                }
            }
            tables[i] = maxValue + 1;
        }
        int max = 0;
        for (int value : tables) {
            if(value > max) {
                max = value;
            }
        }
        return max;
    }
    public static void main(String[] args) {
        int[] nums = {0,1,0,3,2,3};
        System.out.println(new MaxLengthChild().execute(nums));
    }
}