📜  大小为 k 的子数组的所有元素的乘积之和

📅  最后修改于: 2022-05-13 01:57:47.712000             🧑  作者: Mango

大小为 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