# Check if subarray with given product exists in an array

• Difficulty Level : Easy
• Last Updated : 13 Dec, 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 that used in the Maximum Product Subarray, the only task is to simultaneously check that the product is equal to k or not.

Below is the implementation of the 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
```

Time Complexity: O(n)
Auxiliary Space: O(1)

Related Topic: Subarrays, Subsequences, and Subsets in Array

My Personal Notes arrow_drop_up