大小为 k 的子数组的所有元素的乘积之和
给定一个数组和一个数 k,任务是计算大小为 k 的子数组的所有元素的乘积之和。
例子 :
Input : arr[] = {1, 2, 3, 4, 5, 6}
k = 3
Output : 210
Consider all subarrays of size k
1*2*3 = 6
2*3*4 = 24
3*4*5 = 60
4*5*6 = 120
6 + 24 + 60 + 120 = 210
Input : arr[] = {1, -2, 3, -4, 5, 6}
k = 2
Output : -10
Consider all subarrays of size k
1*-2 = -2
-2*3 = -6
3*-4 = -12
-4*5 = -20
5*6 = 30
-2 + -6 + -12 + -20+ 30 = -10
一种朴素的方法是生成所有大小为 k 的子数组,并对子数组的所有元素进行乘积之和。
C++
// C++ program to find the sum of
// product of all subarrays
#include
using namespace std;
// Function to calculate the sum of product
int calcSOP(int arr[], int n, int k)
{
// Initialize sum = 0
int sum = 0;
// Consider every subarray of size k
for (int i = 0; i <= n - k; i++) {
int prod = 1;
// Calculate product of all elements
// of current subarray
for (int j = i; j < k + i; j++)
prod *= arr[j];
// Store sum of all the products
sum += prod;
}
// Return sum
return sum;
}
// Driver code
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
cout << calcSOP(arr, n, k);
return 0;
}
Java
// Java program to find the sum of
// product of all subarrays
class GFG {
// Method to calculate the sum of product
static int calcSOP(int arr[], int n, int k)
{
// Initialize sum = 0
int sum = 0;
// Consider every subarray of size k
for (int i = 0; i <= n - k; i++) {
int prod = 1;
// Calculate product of all elements
// of current subarray
for (int j = i; j < k + i; j++)
prod *= arr[j];
// Store sum of all the products
sum += prod;
}
// Return sum
return sum;
}
// Driver method
public static void main(String[] args)
{
int arr[] = { 1, 2, 3, 4, 5, 6 };
int k = 3;
System.out.println(calcSOP(arr, arr.length, k));
}
}
Python3
# python program to find the sum of
# product of all subarrays
# Function to calculate the sum of product
def calcSOP(arr, n, k):
# Initialize sum = 0
sum = 0
# Consider every subarray of size k
for i in range(0, (n-k)+1):
prod = 1
# Calculate product of all elements
# of current subarray
for j in range(i, k+i):
prod = int(prod * arr[j])
# Store sum of all the products
sum = sum + prod
# Return sum
return sum
#Driver code
arr = [ 1, 2, 3, 4, 5, 6 ]
n = len(arr)
k = 3
print(calcSOP(arr, n, k))
# This code is contributed by Sam007
C#
// C# program to find the sum of
// product of all subarrays
using System;
public class GFG {
// Method to calculate the sum of product
static int calcSOP(int[] arr, int n, int k)
{
// Initialize sum = 0
int sum = 0;
// Consider every subarray of size k
for (int i = 0; i <= n - k; i++) {
int prod = 1;
// Calculate product of all elements
// of current subarray
for (int j = i; j < k + i; j++)
prod *= arr[j];
// Store sum of all the products
sum += prod;
}
// Return sum
return sum;
}
// Driver method
public static void Main()
{
int[] arr = {1, 2, 3, 4, 5, 6};
int k = 3;
Console.WriteLine(calcSOP(arr, arr.Length, k));
}
}
// This code is contributed by Sam007
PHP
Javascript
C++
// C++ program to find the sum of
// product of all subarrays
#include
using namespace std;
// Method to calculate the sum of product
int calcSOP(int arr[], int n, int k)
{
// Initialize sum = 0 and prod = 1
int sum = 0, prod = 1;
// Consider first subarray of size k
// Store the products of elements
for (int i = 0; i < k; i++)
prod *= arr[i];
// Add the product to the sum
sum += prod;
// Consider every subarray of size k
// Remove first element and add current
// element to the window
for (int i = k; i < n; i++) {
// Divide by the first element
// of previous subarray/ window
// and product with the current element
prod = (prod / arr[i - k]) * arr[i];
// Add current product to the sum
sum += prod;
}
// Return sum
return sum;
}
// Driver code
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
cout << calcSOP(arr, n, k);
return 0;
}
// This code is contributed by avijitmondal1998.
Java
// Java program to find the sum of
// product of all subarrays
class GFG {
// Method to calculate the sum of product
static int calcSOP(int arr[], int n, int k)
{
// Initialize sum = 0 and prod = 1
int sum = 0, prod = 1;
// Consider first subarray of size k
// Store the products of elements
for (int i = 0; i < k; i++)
prod *= arr[i];
// Add the product to the sum
sum += prod;
// Consider every subarray of size k
// Remove first element and add current
// element to the window
for (int i = k; i < n; i++) {
// Divide by the first element
// of previous subarray/ window
// and product with the current element
prod = (prod / arr[i - k]) * arr[i];
// Add current product to the sum
sum += prod;
}
// Return sum
return sum;
}
// Driver method
public static void main(String[] args)
{
int arr[] = { 1, 2, 3, 4, 5, 6 };
int k = 3;
System.out.println(calcSOP(arr, arr.length, k));
}
}
Python3
# Python3 program to find the sum of
# product of all subarrays
# Function to calculate the sum of product
def calcSOP(arr, n, k):
# Initialize sum = 0 and prod = 1
sum = 0
prod = 1
# Consider first subarray of size k
# Store the products of elements
for i in range(k):
prod *= arr[i]
# Add the product to the sum
sum += prod
# Consider every subarray of size k
# Remove first element and add current
# element to the window
for i in range(k, n, 1):
# Divide by the first element of
# previous subarray/ window and
# product with the current element
prod = (prod / arr[i - k]) * arr[i]
# Add current product to the sum
sum += prod
# Return sum
return int(sum)
# Drivers code
arr = [1, 2, 3, 4, 5, 6]
n = len(arr)
k = 3
print(calcSOP(arr, n, k))
# This code is contributed 29AjayKumar
C#
// C# program to find the sum of
// product of all subarrays
using System;
public class GFG {
// Method to calculate the sum of product
static int calcSOP(int[] arr, int n, int k)
{
// Initialize sum = 0 and prod = 1
int sum = 0, prod = 1;
// Consider first subarray of size k
// Store the products of elements
for (int i = 0; i < k; i++)
prod *= arr[i];
// Add the product to the sum
sum += prod;
// Consider every subarray of size k
// Remove first element and add current
// element to the window
for (int i = k; i < n; i++) {
// Divide by the first element
// of previous subarray/ window
// and product with the current element
prod = (prod / arr[i - k]) * arr[i];
// Add current product to the sum
sum += prod;
}
// Return sum
return sum;
}
// Driver method
public static void Main()
{
int[] arr = { 1, 2, 3, 4, 5, 6 };
int k = 3;
// Function calling
Console.WriteLine(calcSOP(arr, arr.Length, k));
}
}
// This code is contributed by Sam007
PHP
Javascript
输出:
210
时间复杂度:O(nk)
一种有效的方法是使用滑动窗口的概念。
1-考虑大小为k的第一个子数组/窗口,做元素的乘积并添加到total_sum。
for (i=0; i < k; i++)
prod = prod * arr[i];
2- 现在,通过使用滑动窗口概念,从产品中删除窗口的第一个元素并将下一个元素添加到窗口中。 IE
for (i =k ; i < n; i++)
{
// Removing first element from product
prod = prod / arr[i-k];
// Adding current element to the product
prod = prod * arr[i];
sum += prod;
}
3- 返回总和
C++
// C++ program to find the sum of
// product of all subarrays
#include
using namespace std;
// Method to calculate the sum of product
int calcSOP(int arr[], int n, int k)
{
// Initialize sum = 0 and prod = 1
int sum = 0, prod = 1;
// Consider first subarray of size k
// Store the products of elements
for (int i = 0; i < k; i++)
prod *= arr[i];
// Add the product to the sum
sum += prod;
// Consider every subarray of size k
// Remove first element and add current
// element to the window
for (int i = k; i < n; i++) {
// Divide by the first element
// of previous subarray/ window
// and product with the current element
prod = (prod / arr[i - k]) * arr[i];
// Add current product to the sum
sum += prod;
}
// Return sum
return sum;
}
// Driver code
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 6 };
int n = sizeof(arr) / sizeof(arr[0]);
int k = 3;
cout << calcSOP(arr, n, k);
return 0;
}
// This code is contributed by avijitmondal1998.
Java
// Java program to find the sum of
// product of all subarrays
class GFG {
// Method to calculate the sum of product
static int calcSOP(int arr[], int n, int k)
{
// Initialize sum = 0 and prod = 1
int sum = 0, prod = 1;
// Consider first subarray of size k
// Store the products of elements
for (int i = 0; i < k; i++)
prod *= arr[i];
// Add the product to the sum
sum += prod;
// Consider every subarray of size k
// Remove first element and add current
// element to the window
for (int i = k; i < n; i++) {
// Divide by the first element
// of previous subarray/ window
// and product with the current element
prod = (prod / arr[i - k]) * arr[i];
// Add current product to the sum
sum += prod;
}
// Return sum
return sum;
}
// Driver method
public static void main(String[] args)
{
int arr[] = { 1, 2, 3, 4, 5, 6 };
int k = 3;
System.out.println(calcSOP(arr, arr.length, k));
}
}
Python3
# Python3 program to find the sum of
# product of all subarrays
# Function to calculate the sum of product
def calcSOP(arr, n, k):
# Initialize sum = 0 and prod = 1
sum = 0
prod = 1
# Consider first subarray of size k
# Store the products of elements
for i in range(k):
prod *= arr[i]
# Add the product to the sum
sum += prod
# Consider every subarray of size k
# Remove first element and add current
# element to the window
for i in range(k, n, 1):
# Divide by the first element of
# previous subarray/ window and
# product with the current element
prod = (prod / arr[i - k]) * arr[i]
# Add current product to the sum
sum += prod
# Return sum
return int(sum)
# Drivers code
arr = [1, 2, 3, 4, 5, 6]
n = len(arr)
k = 3
print(calcSOP(arr, n, k))
# This code is contributed 29AjayKumar
C#
// C# program to find the sum of
// product of all subarrays
using System;
public class GFG {
// Method to calculate the sum of product
static int calcSOP(int[] arr, int n, int k)
{
// Initialize sum = 0 and prod = 1
int sum = 0, prod = 1;
// Consider first subarray of size k
// Store the products of elements
for (int i = 0; i < k; i++)
prod *= arr[i];
// Add the product to the sum
sum += prod;
// Consider every subarray of size k
// Remove first element and add current
// element to the window
for (int i = k; i < n; i++) {
// Divide by the first element
// of previous subarray/ window
// and product with the current element
prod = (prod / arr[i - k]) * arr[i];
// Add current product to the sum
sum += prod;
}
// Return sum
return sum;
}
// Driver method
public static void Main()
{
int[] arr = { 1, 2, 3, 4, 5, 6 };
int k = 3;
// Function calling
Console.WriteLine(calcSOP(arr, arr.Length, k));
}
}
// This code is contributed by Sam007
PHP
Javascript
输出:
210