[Medium]Maximum Product Subarray

来源:互联网 发布:yyf淘宝店地址 编辑:程序博客网 时间:2024/05/23 00:41

问题:
Find the contiguous subarray within an array (containing at least one number) which has the largest product.

For example, given the array [2,3,-2,4],
the contiguous subarray [2,3] has the largest product = 6.
解法:

源码:

class Solution {public:    int max_(int a, int b) {        if (a > b) return a; else return b;    }    int min_(int a, int b) {        if (a < b) return a; else return b;    }    int maxProduct(vector<int>& nums) {        int n = nums.size();        int f1[n], f2[n];        if (n == 1) return nums[0];        if (nums[0] > 0) {            f1[0] = nums[0]; f2[0] = 0;        } else {            f2[0] = nums[0]; f1[0] = 0;        }        for (int i = 1; i < n; ++i) {            if (nums[i] > 0) {                f1[i] = max_(f1[i-1] * nums[i], nums[i]);                f2[i] = f2[i-1] * nums[i];            } else {                f1[i] = f2[i-1] * nums[i];                f2[i] = min_(f1[i-1] * nums[i], nums[i]);            }        }         int ans = f1[0];        for (int i = 1; i < n; ++i) {            if (f1[i] > ans) ans = f1[i];        }        return ans;    }};
0 0