您的位置:首页 > 理论基础 > 数据结构算法

动态规划中级教程(leetcode)152.Maximum Product Subarray

2017-07-26 09:52 253 查看
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
.

[-2,3,-4]

dp[2]

[-2] dp[0][0]=-2 dp[1][0]=-2

[-2,3] dp[0][i]=max(nume[i],dp[0][i-1]*nums[i],dp[1][i-1]*nums[i]) dp[1][i]=min(numi[i],dp[0][i-1]*nums[i],dp[1][i-1]*nums[i])

这个状态转移一开始肯定不是这样我直接把最后修正结果放这里,我们要记录最小值的原因是

【-2,3,-4】这个的结果是24因为我们数组中有负数导致

class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.size()==0)
{
return NULL;
}
if(nums.size()==1)
{
return nums[0];
}
int dp[2][nums.size()];
for(int i=0;i<2;i++)
{
for(int j=0;j<nums.size();j++)
{
dp[i][j]=0;
}
}
dp[0][0]=nums[0];
dp[1][0]=nums[0];
int ans=nums[0];
for(int i=1;i<nums.size();i++)
{
dp[0][i]=max(nums[i],dp[0][i-1]*nums[i]);
dp[0][i]=max(dp[0][i],dp[1][i-1]*nums[i]);
ans=max(ans,dp[0][i]);
dp[1][i]=min(nums[i],dp[0][i-1]*nums[i]);
dp[1][i]=min(dp[1][i],dp[1][i-1]*nums[i]);
}
return ans;
}
};

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息