牛客题霸 [子数组最大乘积] 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;
    }
};