检查具有给定产品的子数组是否存在于数组中
给定一个由正整数和负整数组成的数组以及一个数字 K。任务是检查数组中是否存在乘积为 K 的子数组。
例子:
Input: arr[] = {-2, -1, 3, -4, 5}, K = 2
Output: YES
Input: arr[] = {3, -1, -1, -1, 5}, K = 3
Output: NO
方法:该方法类似于最大乘积子数组中使用的方法,唯一的任务是同时检查乘积是否等于 k。
以下是上述方法的实现:
C++
// CPP program to check if there is
// any Subarray with product equal to K
#include
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
Javascript
输出:
YES