动态规划

120 阅读1分钟

1.最长上升子序列

最长上升子序列
给定一个无序的整数数组,找到其中最长上升子序列的长度。
输入: [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长的上升子序列是[2,3,7,101],它的长度是 4。
dp[i] 保存状态
双层循环

 public int lengthOfLIS(int[] nums) {
    if(nums == null || nums.length == 0) return 0;
    int[] dp = new int[nums.length];
    Arrays.fill(dp,1); //初始化
    for(int i = 1; i < dp.length; i++){
        for(int j = 0; j < i; j++){
            if(nums[j] < nums[i]){
                dp[i] = Math.max(dp[i], dp[j]+1); //重点,找出dp[j]+1的最大值
            }
        }
    }
    int max = 0;
    for(int i = 0; i < dp.length; i++){
        max = Math.max(max, dp[i]);
    }
    return max;
}