给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。例如arr=[-2.5,4,0,3,0.5,8,-1],子数组[3,0.5,8]累乘可以获得最大的乘积12,所以返回12。
class Solution {
public:
double maxProduct(vector<double> arr) {
if (arr.empty())
{
return 0;
}
double maxNum = arr[0];
double minNum = arr[0];
double res = arr[0];
double maxEnd = 0;
double minEnd = 0;
int i = 0;
/* max(arr[i])处的最大值和最小值在以下三个选项中
max(arr[i-1]) * arr[i]
min(arr[i-1]) * arr[i]
arr[i]
*/
for(i = 1; i < arr.size(); i++)
{
maxEnd = maxNum * arr[i];
minEnd = minNum * arr[i];
maxNum = max(max(maxEnd, minEnd), arr[i]);
minNum = min(min(maxEnd, minEnd), arr[i]);
res = max(res, maxNum);
}
return res;
}
};