502886mooc中国版最新活动:点燃你的学习热情,开启智慧人生新篇章!

核心内容摘要

探索亚洲新纪元:无痕迹、无顾虑的未来体验
“天天干一两件”:点亮生活,成就更好的你

小乔流泪红脸翻白眼流眼泪

最长重复子数组给两个整数数组nums1和nums2返回两个数组中公共的、长度最长的子数组的长度。

示例 1输入nums1 [1,2,3,2,1], nums2 [3,2,1,4,7]输出3解释长度最长的公共子数组是 [3,2,1] 。

示例 2输入nums1 [0,0,0,0,0], nums2 [0,0,0,0,0]输出5提示1 nums

length, nums

length 10000 nums1[i], nums2[i] 100该题使用暴力解法明显时间复杂度较多可以使用动态规划以空间换时间定义动态规划数组dp[i][j] 以下标i - 1为结尾的nums1和以下标j - 1为结尾的nums2最长重复子数组长度为dp[i][j]两层循环遍历若num1[i - 1] nums2[j - 1] 则说明当前的nums1中的i - 1的位置和j - 1相同在两者之前的长度上加一即可例如nums1 [1,2,3,2,1], nums2 [3,2,1,4,7]i 2,j 2时 nums1[1] nums[1] 在动态规划数组中说明在当前nums1的下标1位置和nums2的下标1相同最长子序列只需在nums1的下标0和nums2的下表0的位置处的最长子数组加一即可即dp[i][j] dp[i - 1][j - 1] 1public static void main(String[] args) { // 测试用 int[] nums1 {1,2,3,2,1}; int[] nums2 {3,2,1,4,7}; System.out.println(findLength(nums1, nums

); } public static int findLength(int[] nums1, int[] nums

{ int[][] dp new int[nums

length 1][nums

length 1]; int res 0; for (int i 1; i nums

length; i) { for (int j 1; j nums

length; j) { if (nums1[i - 1] nums2[j - 1]){ dp[i][j] dp[i - 1][j - 1] 1; } res Math.max(res, dp[i][j]); } } return res; }以上为记录分享用代码较差请见谅

exo妈妈mv高清在线观看视频-exo妈妈mv高清在线观看视频应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123