给定一个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 maxn = arr[0]; double minn = arr[0]; double res = arr[0]; double maxEnd = 0; double minEnd = 0; for(int i=1;i<arr.size();i++){ maxEnd = maxn*arr[i]; minEnd = minn*arr[i]; maxn = max(max(maxEnd, minEnd),arr[i]); minn = min(min(maxEnd, minEnd),arr[i]); res = max(res, maxn); } return res; } };