题目描述
给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。
示例1
输入
复制
[-2.5,4,0,3,0.5,8,-1]
返回值
复制
12.00000
解法:行和列都是自身,然后构建一个累乘的网格,很轻易的就能找到网格的递推关系,于是直接上代码。
class Solution {
public:
double maxProduct(vector<double> arr) {
if(arr.size()==0)
return 0;
double maxnum=arr[0];
size_t len=arr.size();
vector<vector<double> >cell(len,vector<double>(len));
for(size_t i=0;i<len;i++)
{
for(size_t j=0;j<=i;j++)
{
if(i==j)
{
cell[i][j]=arr[i];
}
else
{
cell[i][j]=cell[i-1][j]*arr[i];
}
maxnum=max(maxnum, cell[i][j]);
}
}
return maxnum;
}
};