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