这道题目加深了我对于DP的理解,这里需要记录最大值和最小值,最大值来源于正数相乘或负数相乘,因此初始时最终结果res cur_min cur_max均为nums[0],然后计算cur_min和cur_max乘以nums[i],最终计算三者当中最小值 最大值,更新到cur_min 和cur_max在下一个循环里继续处理,最终结果即res.

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int size = nums.size();
        int res = nums[0], cur_min = nums[0], cur_max = nums[0];
        
        for(int i = 1;i < size;i++ )
        {
            int next_min,next_max;
            next_min = min(cur_min * nums[i],min(cur_max * nums[i],nums[i]));
            next_max = max(cur_min * nums[i],max(cur_max * nums[i],nums[i]));
            
            cur_min = next_min,cur_max = next_max;
            res = (cur_max > res) ? cur_max : res;
        }
        
        return res;
    }
};