leetcode_Maximum Product Subarray _medium(最大子数组之积)

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.

方法:动态规划, O(n)。

和最大子数组之和的问题类似,只是这里是乘法,而且也要将最小之积(也即最小的负数积的情况进行记录,以便求出最后最大的积)记录。


class Solution {
public:
    int myMax(int a,int b)
    {
        return a>b?a:b;
    }
    
    int myMin(int a,int b)
    {
        return a<b?a:b;
    }
    
   int maxProduct(vector<int>& nums) {
		int n=nums.size();
		int iStartMax=nums[n-1],iAllMax=nums[n-1],iStartMin=nums[n-1],iMaxTmp,iMinTmp;//iMaxTmp,iMinTmp临时保存iStartMax,iStartMin
		for(int i=n-2; i>=0; i--)
		{
			iMaxTmp=myMax( myMax(nums[i]*iStartMax,nums[i]*iStartMin),nums[i] );
			iMinTmp=myMin( myMin(nums[i]*iStartMax,nums[i]*iStartMin),nums[i] );
			iStartMax=iMaxTmp;
			iStartMin=iMinTmp;
			iAllMax=myMax(iAllMax,iStartMax);
		}
		return iAllMax;
	}
};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值