代码随想录算法训练营第五十三天 | 最长公共子序列、不相交的线、最大子数组和

● 今日学习的文章链接和视频链接

题目1143. 最长公共子序列
题目1035. 不相交的线
题目53. 最大子数组和

● 看到题目的第一想法

继续系列题

● 看完代码随想录之后的想法

还是有些难

● 实现过程中遇到哪些困难

1143

● 解题代码

  1. 点击查看代码
    class Solution {
        public int longestCommonSubsequence(String text1, String text2) {
    		int result = 0;
    		int[][] dp = new int[text1.length() + 1][text2.length() + 1];
    
    		for (int i = 1; i < text1.length() + 1; i++) {
    			char char1 = text1.charAt(i - 1);
    			for (int j = 1; j < text2.length() + 1; j++) {
    				char char2 = text2.charAt(j - 1);
    				if (char1 == char2) { // 开始列出状态转移方程
    					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[text1.length()][text2.length()];
        }
    }
    
  2. 点击查看代码
    class Solution {
        public int maxUncrossedLines(int[] nums1, int[] nums2) {
    		int[][] dp = new int[nums1.length + 1][nums2.length + 1];
    
    		for (int i = 1; i < nums1.length + 1; i++) {
    			for (int j = 1; j < nums2.length + 1; 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[nums1.length][nums2.length];
        }
    }
    
  3. 点击查看代码
    public int maxSubArray(int[] nums) {
        if (nums.length == 0) {
            return 0;
        }
        int res = nums[0];
        int[] dp = new int[nums.length];
        dp[0] = nums[0];
        for (int i = 1; i < nums.length; i++) {
            dp[i] = Math.max(dp[i - 1] + nums[i], nums[i]);
            res = Math.max(res, dp[i]);
        }
        return res;
    }
    

● 今日收获,学习时长

今日收获:学习了子序列
学习时长:1h
posted @ 2024-01-20 16:57  雨年今天有记录吗  阅读(0)  评论(0)    收藏  举报