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 subarraybool 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 functionint 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 Kimport java.io.*;class GFG { // Function to find maximum// product subarraystatic 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 Codepublic 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 subarraydef 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 Codeif __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 Kusing System;class GFG { // Function to find maximum// product subarraystatic 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 Codepublic 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!
