在本教程中,我们将讨论一个程序来查找最大乘积子数组-使用两个遍历
为此,我们将提供一个包含正值和负值的数组。我们的任务是在O(n)时间复杂度内找到子阵列的最大乘积。
#include<bits/stdc++.h> using namespace std; //finding maximum product int max_product(int arr[], int n) { int max_fwd = INT_MIN, max_bkd = INT_MIN; int max_till_now = 1; bool isZero=false; for (int i=0; i<n; i++) { max_till_now = max_till_now*arr[i]; if (max_till_now == 0) { isZero=true; max_till_now = 1; continue; } if (max_fwd < max_till_now) max_fwd = max_till_now; } max_till_now = 1; for (int i=n-1; i>=0; i--) { max_till_now = max_till_now * arr[i]; if (max_till_now == 0) { isZero=true; max_till_now = 1; continue; } if (max_bkd < max_till_now) max_bkd = max_till_now; } int res = max(max_fwd, max_bkd); if(isZero) return max(res, 0); return res; } int main() { int arr[] = {-1, -2, -3, 4}; int n = sizeof(arr)/sizeof(arr[0]); cout << max_product(arr, n) << endl; return 0; }
输出结果
24