给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。
输入: A: [1,2,3,2,1] B: [3,2,1,4,7] 输出: 3 解释: 长度最长的公共子数组是 [3, 2, 1]。代码:
class Solution { public: int findLength(vector<int>& A, vector<int>& B) { int num=0; int x=A.size(); int y =B.size(); vector<vector<int>> dp(x+1,vector<int>(y+1,0)); for(int i=1;i<=x;i++) { for(int j =1;j<=y;j++) { dp[i][j]=A[i-1]==B[j-1]?dp[i-1][j-1]+1:0; num=max(num,dp[i][j]); } } return num; } };奔向题源Leetcode
输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。
要求时间复杂度为O(n)。
输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。代码:
class Solution { public: int maxSubArray(vector<int>& nums) { int my=nums[0]; int l =nums.size(); vector<int> dp(l,0); dp[0]=nums[0]; for(int i=1;i<l;i++) { dp[i]=dp[i-1]>0?nums[i]+dp[i-1]:nums[i]; my=max(my,dp[i]); } return my; } };初始状态:dp[0]=nums[0],即以 nums[0] 结尾的连续子数组最大和为nums[0] 。
返回值: 返回 dp 列表中的最大值,代表全局最大值
奔向题源Leetcode
详情动画连接:https://leetcode-cn.com/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof/solution/mian-shi-ti-42-lian-xu-zi-shu-zu-de-zui-da-he-do-2/
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
示例 1: 输入: "babad" 输出: "bab" 注意: "aba" 也是一个有效答案。 示例 2: 输入: "cbbd" 输出: "bb"总结: 1.找到动态规划的状态转移方程 2.找到动态规划的边界条件