首页 > 其他分享 >代码随想录训练营第五十三天 | 动态规划

代码随想录训练营第五十三天 | 动态规划

时间:2022-12-05 14:11:48浏览次数:56  
标签:nums int 训练营 随想录 length 第五十三 new dp

今天是代码随想录的第五十三天,今天依旧是子集问题

   

●  1143.最长公共子序列 

class Solution {
    public int longestCommonSubsequence(String text1, String text2) {
        int n = text1.length();
        int m = text2.length();
        int[][] dp = new int[n+1][m+1];
        for(int i = 1 ; i<= n; i++){
            char temp1 = text1.charAt(i-1);
            for(int j = 1; j<=m; j++){
                char temp2 = text2.charAt(j-1);
                if(temp1 == temp2){
                    dp[i][j] = dp[i-1][j-1]+1;
                }
                else{
                    dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
                }
            }
        }
        return dp[n][m];
    }
}

dp[i][j]是dp[i][j]前一位的最大公共元素,每找到一位相同的,那么就可以加上1.

 

●  1035.不相交的线 

class Solution {
    public int maxUncrossedLines(int[] nums1, int[] nums2) {
        int n = nums1.length;
        int m = nums2.length;
        int[][] dp = new int[n+1][m+1];
        for(int i = 1; i<=n; i++){
            for(int j = 1; j<=m; j++){
                if(nums1[i-1] == nums2[j-1]){
                    dp[i][j] = dp[i-1][j-1]+1;
                }
                else{
                    dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
                }

            }
        }
        return dp[n][m];
    }
}

转化成最长子序列问题后,和上一题一样的思路

●  53. 最大子序和 动态规划

class Solution {
    public int maxSubArray(int[] nums) {
        int n = nums.length;
        int[] dp = new int[n];
        dp[0] = nums[0];
        
        for(int i = 1; i < n; i++){
            if(nums[i-1]>0){
                nums[i] += nums[i-1];
            }
            dp[i] = Math.max(dp[i-1], nums[i]);
            
        }

        return dp[n-1];
    }
}

好像又回归到普通的dp了

 

刷题计划已经临近尾声!加油!!

标签:nums,int,训练营,随想录,length,第五十三,new,dp
From: https://www.cnblogs.com/catSoda/p/16952134.html

相关文章