From dcdb0f80c2228772454b73c2d81b8a42c561ca66 Mon Sep 17 00:00:00 2001 From: sahil9510 Date: Wed, 19 Oct 2022 21:28:53 +0530 Subject: [PATCH] maximum product --- leetcode/MaximumProductSubarray.cpp | 45 +++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 leetcode/MaximumProductSubarray.cpp diff --git a/leetcode/MaximumProductSubarray.cpp b/leetcode/MaximumProductSubarray.cpp new file mode 100644 index 0000000..401f30a --- /dev/null +++ b/leetcode/MaximumProductSubarray.cpp @@ -0,0 +1,45 @@ +// C++ program to find Maximum Product Subarray +#include +using namespace std; + +/* Returns the product +of max product subarray. */ +int maxSubarrayProduct(int arr[], int n) +{ + // max positive product + // ending at the current position + int max_ending_here = arr[0]; + + // min negative product ending + // at the current position + int min_ending_here = arr[0]; + + // Initialize overall max product + int max_so_far = arr[0]; + /* Traverse through the array. + the maximum product subarray ending at an index + will be the maximum of the element itself, + the product of element and max product ending previously + and the min product ending previously. */ + for (int i = 1; i < n; i++) { + int temp = max({ arr[i], arr[i] * max_ending_here, + arr[i] * min_ending_here }); + min_ending_here + = min({ arr[i], arr[i] * max_ending_here, + arr[i] * min_ending_here }); + max_ending_here = temp; + max_so_far = max(max_so_far, max_ending_here); + } + return max_so_far; +} + +// Driver code +int main() +{ + int arr[] = { 1, -2, -3, 0, 7, -8, -2 }; + int n = sizeof(arr) / sizeof(arr[0]); + cout << "Maximum Sub array product is " + << maxSubarrayProduct(arr, n); + return 0; +} + \ No newline at end of file