Open In App

Check if subarray with given product exists in an array

Last Updated : 05 Jul, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads