牛客题霸 [子数组最大乘积] C++题解/答案
题目描述
给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。
题解:
同时记录最大值和最小值,为什么?因为给的元素是存在负数的,当出现负数时,最大值会变成最小值,而最小值也会翻身成最大值,所以要同时记录,每次最最大情况
代码:
class Solution {
public:
double maxProduct(vector<double> arr) {
double ansmin = 1,ansmax = 1;
double result = arr[0];
for (int i = 0; i < arr.size() ; i++) {
if (arr[i] < 0)swap(ansmin,ansmax);
ansmin = min(ansmin * arr[i],arr[i]);
ansmax = max(ansmax * arr[i],arr[i]);
result = max(result,ansmax);
}
return result;
}
};