您的位置:首页 > 其它

leetCode_Maximum Product Subarray

2016-06-05 19:56 375 查看
题意:给定一列数,找出乘积最大的子数组

解法:这道题非!常!山!寨!思路很简单,用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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: