赞
踩
题目难度:中等
题目描述:
解题思路:
最经典的动态规划, 在遍历的时候情况分为:
- 两个数相等,直接更新
- dp[i][j] = dp[i - 1][j - 1] + 1;
- 两个数不相等,更新dp取决下面两种情况的最大值
- dp[i][j] = dp[i - 1][j];
- dp[i][j] = dp[i][j - 1];
code:
class Solution { public int maxUncrossedLines(int[] nums1, int[] nums2) { int n = nums1.length, m = nums2.length; int[][] dp = new int[n + 1][m + 1]; for (int i = 1; i <= n; i ++) { int num1 = nums1[i - 1]; for (int j = 1; j <= m; j ++) { int num2 = nums2[j - 1]; if (num1 == num2) { 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]; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。