0314-2020-LEETCODE-300-最长上升子序列-经典的DP问题

维护DP[ ]数组,通过一个状态转移方程:dp[i] = Math.max(dp[i],dp[j]+1); 当nums[i] > num[j]时实现这个状态转移方程,当条件不满足时,跳过此时的j,不操作。j的循环区间是for(0,i);

	//经典的动态规划问题:DP解决。
    public int lengthOfLIS1(int[] nums) {
        if (nums.length == 0){
            return 0;
        }
        int[] dp = new int[nums.length];
        Arrays.fill(dp,1);
        int res = 0;
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < i; j++) {
                if (nums[j] < nums[i]){
                    dp[i] = Math.max(dp[i],dp[j] + 1);
                }
            }
            res = Math.max(res,dp[i]);
        }
        return res;
    }
发布了98 篇原创文章 · 获赞 0 · 访问量 2199

猜你喜欢

转载自blog.csdn.net/weixin_43221993/article/details/104869080