在本教程中,我们将讨论一个程序来查找具有负乘积情况的最大乘积子数组。
为此,我们将提供一个包含正值和负值的数组。我们的任务是在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