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: YES
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 <bits/stdc++.h> 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
<?php // PHP program to check if there is // any Subarray with product equal to K // Function to find maximum // product subarray function 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 = 1; $i < $n ; $i ++) { // When multiplied by -ve number, // maxVal becomes minVal // and minVal becomes maxVal. if ( $arr [ $i ] < 0) { $temp = $maxVal ; $maxVal = $minVal ; $minVal = $temp ; } // 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 Code $arr = array (1, 2, -5, -4 ); $product = -10; $n = sizeof( $arr ); if (maxProduct( $arr , $n , $product )) { echo ( "YES" ) ; } else echo ( "NO" ); // This code is contributed // by Shivi_Aggarwal ?> |
Javascript
<script> // Javascript program to check if there // is any Subarray with product // equal to K // Function to find maximum // product subarray function maxProduct(arr,n,p) { // Variables to store maximum // and minimum product till // ith index. let minVal = arr[0]; let maxVal = arr[0]; let maxProduct = arr[0]; for (let i = 1; i < n; i++) { // When multiplied by -ve number, // maxVal becomes minVal // and minVal becomes maxVal. if (arr[i] < 0) { let 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 let arr=[1, 2, -5, -4]; let product = -10; let n = arr.length; if (maxProduct(arr, n, product)) { document.write( "YES" ); } else document.write( "NO" ); // This code is contributed by avanitrachhadiya2155 </script> |
YES
Time Complexity: O(n)
Auxiliary Space: O(1)
Related Topic: Subarrays, Subsequences, and Subsets in Array
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!