152. Maximum Product Subarray

2018/05/15 leetcode 共 635 字,约 2 分钟

title

Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

Example 1:

Input: [2,3,-2,4]

Output: 6

Explanation: [2,3] has the largest product 6.

Example 2:

Input: [-2,0,-1]

Output: 0

Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

solution

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int n=nums.size();
        vector<int> d1(n),d2(n);
        for(int i=0;i<n;i++){
            d1[i]=nums[i];
            d2[i]=nums[i];
        }
        int res=d1[0];
        for(int i=1;i<n;i++){
            d1[i]=max(d1[i-1]*nums[i],max(d2[i-1]*nums[i],nums[i]));
            d2[i]=min(d2[i-1]*nums[i],min(d1[i-1]*nums[i],nums[i]));
            res=max(res,d1[i]);
        }
        return res;
    }
};

Search

    Table of Contents