152. Maximum Product Subarray

来源:互联网 发布:云计算市场分析报告 编辑:程序博客网 时间:2024/05/20 03:39

题目

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.

题意

求成绩最大的子数组(连续)的乘积

分析

乘负数可能会让最大值变成最小值.
所以两个临时变量, 存以i结尾的子数组的最大值tmax和最小值tmin,
if(nums[i]<0)swap(tmax,tmin)
tmax=max(nums[i],tmaxnums[i])
tmin=min(nums[i],tminnums[i])

实现

class Solution {public:    int maxProduct(vector<int>& nums) {        if (nums.empty()) return 0;        int res = nums[0], tmax = nums[0], tmin = nums[0];        for(int i = 1; i < nums.size(); i++) {            if (nums[i] < 0)                swap(tmax, tmin);            tmax = max(nums[i], tmax*nums[i]);            tmin = min(nums[i], tmin*nums[i]);            res = max(res, tmax);        }        return res;    }};