leetCode_Maximum Product Subarray

来源:互联网 发布:编程算法 编辑:程序博客网 时间:2024/06/07 10:03

题意:给定一列数,找出乘积最大的子数组

解法:这道题非!常!山!寨!思路很简单,用temp记录当前乘到哪儿了。如果temp为正数,则更新(由于数组都是整数所以肯定越乘越大),若temp为负数则保存当前值与第一个负数的temp相除的值。要注意若某个元素为0时,需要将temp初始化。上代码。maxVal表示第一个出现的temp为负数的值。

int maxProduct(vector<int>& nums){    int temp=1,i,j,k,maxVal=INT_MAX,size=nums.size(),res=nums[0];    for(i=0; i<size; i++)    {        if(nums[i]==0)        {            res=max(res,0);            temp=1;            maxVal=INT_MAX;            continue;        }        temp=temp*nums[i];        if(temp>0)res=max(res,temp);        else        {            if(maxVal==INT_MAX)            {                maxVal=temp;                res=max(res,temp);            }            else res=max(res,temp/maxVal);        }    }    return res;}

0 0
原创粉丝点击