动态规划(最大乘积连续子串和最大和连续子串)

  1. Maximum Subarray:https://leetcode.com/problems/maximum-subarray/description/
class Solution {
public:
    int maxSubArray(vector& nums) {
        int n=nums.size();
        vector dp(n);
        dp[0]=nums[0];
        int max=nums[0];
        for(int i=1;i0?dp[i-1]:0);
            max=max>dp[i]?max:dp[i];
        }
        return max;
    }
};

dp存储局部最优值,即到i位置的最大和
max为全局最优值(不应从前缀和的角度考虑,应考虑正负)

  1. Maximum Product Subarray: https://leetcode.com/problems/maximum-product-subarray/description/
class Solution {
public:
    int maxProduct(vector& nums) {
        int n=nums.size();
        vectorfirst(n);
        vectorlast(n);
        first[0]=nums[0];
        last[0]=nums[0];
        for(int i=1;i

first为局部最大值,last为局部最小值。由于乘积需要考虑正负的情况,即负负得正,因此需要记录局部最小值和局部最大值

你可能感兴趣的:(动态规划(最大乘积连续子串和最大和连续子串))