最大产品子阵列| 在C ++中添加了否定产品案例

在本教程中,我们将讨论一个程序来查找具有负乘积情况的最大乘积子数组。

为此,我们将提供一个包含正值和负值的数组。我们的任务是在O(n)时间复杂度内找到子阵列的最大乘积。

示例

#include <bits/stdc++.h>
using namespace std;
//查找最大乘积子数组
int findMaxProduct(int arr[], int n) {
   int i;
   int ans = INT_MIN;
   int maxval = 1;
   int minval = 1;
   int prevMax;
   for (i = 0; i < n; i++) {
      if (arr[i] > 0) {
         maxval = maxval * arr[i];
         minval = min(1, minval * arr[i]);
      }
      else if (arr[i] == 0) {
         minval = 1;
         maxval = 0;
      }
      else if (arr[i] < 0) {
         prevMax = maxval;
         maxval = minval * arr[i];
         minval = prevMax * arr[i];
      }
      ans = max(ans, maxval);
      if (maxval <= 0) {
         maxval = 1;
      }
   }
   return ans;
}
int main() {
   int arr[] = { 0, -4, 0, -2 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout << findMaxProduct(arr, n);
   return 0;
}

输出结果

0