# Check if subarray with given product exists in an array

• Difficulty Level : Easy
• Last Updated : 11 Jul, 2022

Given an array of both positive and negative integers and a number K. The task is to check if any subarray with product K is present in the array or not.
Examples:

```Input: arr[] = {-2, -1, 3, -4, 5}, K = 2
Output: YES

Input: arr[] = {3, -1, -1, -1, 5}, K = 3
Output: NO```

Approach: The approach is similar to used in Maximum Product Subarray, the only task is to simultaneously check that the product is equal to k or not.
Below is the implementation of above approach:

## C++

 `// CPP program to check if there is ` `// any Subarray with product equal to K ` `#include ` `using` `namespace` `std; ` ` `  `// Function to find maximum product subarray ` `bool` `maxProduct(``int``* arr, ``int` `n, ``int` `p) ` `{ ` `    ``// Variables to store maximum and minimum ` `    ``// product till ith index. ` `    ``int` `minVal = arr[0]; ` `    ``int` `maxVal = arr[0]; ` ` `  `    ``int` `maxProduct = arr[0]; ` ` `  `    ``for` `(``int` `i = 1; i < n; i++) { ` ` `  `        ``// When multiplied by -ve number, ` `        ``// maxVal becomes minVal ` `        ``// and minVal becomes maxVal. ` `        ``if` `(arr[i] < 0) ` `            ``swap(maxVal, minVal); ` ` `  `        ``// maxVal and minVal stores the ` `        ``// product of subarray ending at arr[i]. ` `        ``maxVal = max(arr[i], maxVal * arr[i]); ` `        ``minVal = min(arr[i], minVal * arr[i]); ` ` `  `        ``// Check if the current product is ` `        ``// equal to the given product ` `        ``if` `(minVal == p || maxVal == p) { ` `            ``return` `true``; ` `        ``} ` ` `  `        ``// Max Product of array. ` `        ``maxProduct = max(maxProduct, maxVal); ` `    ``} ` ` `  `    ``// Return maximum product found in array. ` `    ``return` `false``; ` `} ` ` `  `// Driver Program to test above function ` `int` `main() ` `{ ` `    ``int` `arr[] = { 1, 2, -5, -4 }; ` `    ``int` `product = -10; ` `    ``int` `n = ``sizeof``(arr) / ``sizeof``(arr[0]); ` ` `  `    ``if` `(maxProduct(arr, n, product)) { ` `        ``cout << ``"YES"` `<< endl; ` `    ``} ` `    ``else` `        ``cout << ``"NO"` `<< endl; ` ` `  `    ``return` `0; ` `} `

## Java

 `// Java program to check if there  ` `// is any Subarray with product  ` `// equal to K ` `import` `java.io.*; ` ` `  `class` `GFG  ` `{ ` `     `  `// Function to find maximum ` `// product subarray ` `static` `boolean` `maxProduct(``int` `arr[],  ` `                          ``int` `n, ``int` `p) ` `{ ` `    ``// Variables to store maximum  ` `    ``// and minimum product till  ` `    ``// ith index. ` `    ``int` `minVal = arr[``0``]; ` `    ``int` `maxVal = arr[``0``]; ` ` `  `    ``int` `maxProduct = arr[``0``]; ` ` `  `    ``for` `(``int` `i = ``1``; i < n; i++)  ` `    ``{ ` ` `  `        ``// When multiplied by -ve number, ` `        ``// maxVal becomes minVal ` `        ``// and minVal becomes maxVal. ` `        ``if` `(arr[i] < ``0``) ` `        ``{ ` `            ``int` `temp = maxVal; ` `            ``maxVal = minVal; ` `            ``minVal = temp; ` `        ``} ` `         `  `        ``// maxVal and minVal stores  ` `        ``// the product of subarray  ` `        ``// ending at arr[i]. ` `        ``maxVal = Math.max(arr[i], ` `                      ``maxVal * arr[i]); ` `        ``minVal = Math.min(arr[i],  ` `                      ``minVal * arr[i]); ` ` `  `        ``// Check if the current product  ` `        ``// is equal to the given product ` `        ``if` `(minVal == p || maxVal == p) ` `        ``{ ` `            ``return` `true``; ` `        ``} ` ` `  `        ``// Max Product of array. ` `        ``maxProduct = Math.max(maxProduct,  ` `                              ``maxVal); ` `    ``} ` ` `  `    ``// Return maximum product ` `    ``// found in array. ` `    ``return` `false``; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `main (String[] args)  ` `{ ` `    ``int` `[]arr = { ``1``, ``2``, -``5``, -``4` `}; ` `    ``int` `product = -``10``; ` `    ``int` `n = arr.length; ` `     `  `    ``if` `(maxProduct(arr, n, product))  ` `    ``{ ` `        ``System.out.println( ``"YES"``); ` `    ``} ` `    ``else` `        ``System.out.println( ``"NO"``); ` `} ` `} ` ` `  `// This code is contributed  ` `// by inder_verma `

## Python 3

 `# Python 3 program to check if there is ` `# any Subarray with product equal to K ` ` `  `# Function to find maximum ` `# product subarray ` `def` `maxProduct(arr,n, p): ` ` `  `    ``# Variables to store maximum and  ` `    ``# minimum product till ith index. ` `    ``minVal ``=` `arr[``0``] ` `    ``maxVal ``=` `arr[``0``] ` ` `  `    ``maxProduct ``=` `arr[``0``] ` ` `  `    ``for` `i ``in` `range``( ``1``, n): ` ` `  `        ``# When multiplied by -ve number, ` `        ``# maxVal becomes minVal ` `        ``# and minVal becomes maxVal. ` `        ``if` `(arr[i] < ``0``): ` `            ``maxVal, minVal ``=` `minVal, maxVal ` ` `  `        ``# maxVal and minVal stores the ` `        ``# product of subarray ending at arr[i]. ` `        ``maxVal ``=` `max``(arr[i], maxVal ``*` `arr[i]) ` `        ``minVal ``=` `min``(arr[i], minVal ``*` `arr[i]) ` ` `  `        ``# Check if the current product is ` `        ``# equal to the given product ` `        ``if` `(minVal ``=``=` `p ``or` `maxVal ``=``=` `p): ` `            ``return` `True` ` `  `        ``# Max Product of array. ` `        ``maxProduct ``=` `max``(maxProduct, maxVal) ` ` `  `    ``# Return maximum product  ` `    ``# found in array. ` `    ``return` `False` ` `  `# Driver Code ` `if` `__name__ ``=``=` `"__main__"``: ` `     `  `    ``arr ``=` `[ ``1``, ``2``, ``-``5``, ``-``4` `] ` `    ``product ``=` `-``10` `    ``n ``=` `len``(arr) ` ` `  `    ``if` `(maxProduct(arr, n, product)): ` `        ``print``(``"YES"``) ` `    ``else``: ` `        ``print``(``"NO"``) ` ` `  `# This code is contributed  ` `# by ChitraNayal `

## C#

 `// C# program to check if there  ` `// is any Subarray with product  ` `// equal to K ` `using` `System; ` ` `  `class` `GFG  ` `{ ` `     `  `// Function to find maximum ` `// product subarray ` `static` `bool` `maxProduct(``int` `[]arr,  ` `                       ``int` `n, ``int` `p) ` `{ ` `    ``// Variables to store maximum  ` `    ``// and minimum product till  ` `    ``// ith index. ` `    ``int` `minVal = arr[0]; ` `    ``int` `maxVal = arr[0]; ` ` `  `    ``int` `maxProduct = arr[0]; ` ` `  `    ``for` `(``int` `i = 1; i < n; i++)  ` `    ``{ ` ` `  `        ``// When multiplied by -ve number, ` `        ``// maxVal becomes minVal ` `        ``// and minVal becomes maxVal. ` `        ``if` `(arr[i] < 0) ` `        ``{ ` `            ``int` `temp = maxVal; ` `            ``maxVal = minVal; ` `            ``minVal = temp; ` `        ``} ` `         `  `        ``// maxVal and minVal stores  ` `        ``// the product of subarray  ` `        ``// ending at arr[i]. ` `        ``maxVal = Math.Max(arr[i], ` `                    ``maxVal * arr[i]); ` `        ``minVal = Math.Min(arr[i],  ` `                    ``minVal * arr[i]); ` ` `  `        ``// Check if the current product  ` `        ``// is equal to the given product ` `        ``if` `(minVal == p || maxVal == p) ` `        ``{ ` `            ``return` `true``; ` `        ``} ` ` `  `        ``// Max Product of array. ` `        ``maxProduct = Math.Max(maxProduct,  ` `                              ``maxVal); ` `    ``} ` ` `  `    ``// Return maximum product ` `    ``// found in array. ` `    ``return` `false``; ` `} ` ` `  `// Driver Code ` `public` `static` `void` `Main ()  ` `{ ` `    ``int` `[]arr = { 1, 2, -5, -4 }; ` `    ``int` `product = -10; ` `    ``int` `n = arr.Length; ` `     `  `    ``if` `(maxProduct(arr, n, product))  ` `    ``{ ` `        ``Console.WriteLine( ``"YES"``); ` `    ``} ` `    ``else` `        ``Console.WriteLine( ``"NO"``); ` `} ` `} ` ` `  `// This code is contributed  ` `// by inder_verma `

## PHP

 ` `

## Javascript

 ` `

Output:

`YES`

Related Topic: Subarrays, Subsequences, and Subsets in Array

My Personal Notes arrow_drop_up
Recommended Articles
Page :