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> |
Output
YES
Time Complexity: O(n)
Auxiliary Space: O(1)
Related Topic: Subarrays, Subsequences, and Subsets in Array
Feeling lost in the world of random DSA topics, wasting time without progress? It’s time for a change! Join our DSA course, where we’ll guide you on an exciting journey to master DSA efficiently and on schedule.
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!