Skip to content
Related Articles

Related Articles

Check if subarray with given product exists in an array
  • Difficulty Level : Easy
  • Last Updated : 11 Dec, 2018

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 <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 
?>


Output:

YES

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.




My Personal Notes arrow_drop_up
Recommended Articles
Page :