Verifique si el subarreglo con el producto dado existe en un arreglo

Dada una array de enteros positivos y negativos y un número K. La tarea es verificar si algún subarreglo con el producto K está presente en la array o no.
Ejemplos: 
 

Input: arr[] = {-2, -1, 3, -4, 5}, K = 2
Output: YES

Input: arr[] = {3, -1, -1, -1, 5}, K = 3
Output: NO

Enfoque: el enfoque es similar al utilizado en el subarreglo de producto máximo , la única tarea es verificar simultáneamente que el producto es igual a k o no.
A continuación se muestra la implementación del enfoque anterior: 
 

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>
Producción: 

YES

 

Tema relacionado: Subarrays, subsecuencias y subconjuntos en array

Publicación traducida automáticamente

Artículo escrito por barykrg y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *