leetcode 152. Maximum Product Subarray

题目

求一个数组的最大子段乘积

思路以及代码

先看下面代码,看完了以后再讲思路233

class Solution {
public:
    
    int maxProduct(vector<int>& nums) {
        int len = nums.size();
        if(len == 0) return {};
        if(len == 1) return {nums[0]};
        int pre = 1, last = 1;
        int res = nums[0];
        for(int i=0; i<len; i++) {
            pre *= nums[i];
            last *= nums[len-i-1];
            res = max(res, max(pre,last));
            pre = (pre == 0) ? 1 : pre;
            last = (last == 0) ? 1 : last;
        }
        return res;
    } 
};

由于一个数组可能全是正数,那我们直接求所有的数的乘积即为结果
如果一个数组有负数,我们假设下面这种形式 aBcD,大写为负数,那么 最优秀解可能是 aBcD
如果是下面这种形式AbCdE 这样最优解可能就是AbCd 或者 bCdE

posted @ 2019-06-18 20:44  Draymonder  阅读(74)  评论(0编辑  收藏  举报