标签:
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
.
Array Dynamic Programming
而对于Product Subarray,要考虑到一种特殊情况,即负数和负数相乘:如果前面得到一个较小的负数,和后面一个较大的负数相乘,得到的反而是一个较大的数,如{2,-3,-7},所以,我们在处理乘法的时候,除了需要维护一个局部最大值,同时还要维护一个局部最小值,由此,可以写出如下的转移方程式:
max_copy[i] = max_local[i]
max_local[i + 1] = Max(Max(max_local[i] * A[i], A[i]), min_local * A[i])
min_local[i + 1] = Min(Min(max_copy[i] * A[i], A[i]), min_local * A[i])
#include<iostream> #include<vector> #include<math.h> using namespace std; int maxProduct(vector<int>& nums) { int len=nums.size(); if(len==1) return nums[0]; int maxm=nums[0]; int minm=nums[0]; int re=nums[0]; for(int i=1;i<len;i++) { int a=max(max(maxm*nums[i],nums[i]),minm*nums[i]); int b=min(min(maxm*nums[i],nums[i]),minm*nums[i]); if(a>re) re=a; if(b>re) re=b; maxm=a; minm=b; } return re; } int main() { int ary[4]={2,3,-2,4}; vector<int> vec(ary,ary+4); cout<<maxProduct(vec)<<endl; }
leetcode_152题——Maximum Product Subarray(动态规划)
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4634395.html