📜  给定总和的大小为 k 的子数组

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

给定总和的大小为 k 的子数组

给定一个数组 arr[]、一个整数 K 和一个 Sum。任务是检查是否存在任何具有 K 个元素的子数组,其总和等于给定总和。如果任何大小为 K 的子数组的总和等于给定的总和,则打印 YES,否则打印 NO。
例子

Input: arr[] = {1, 4, 2, 10, 2, 3, 1, 0, 20}
        k = 4, sum = 18
Output: YES
Subarray = {4, 2, 10, 2}

Input: arr[] = {1, 4, 2, 10, 2, 3, 1, 0, 20}
        k = 3, sum = 6
Output: YES

一个简单的解决方案是使用嵌套循环,我们检查每个大小为 k 的子数组。
下面是上述方法的实现:

C++
// CPP program to check if any Subarray of size
// K has a given Sum
#include 
using namespace std;
 
// Function to check if any Subarray of size K
// has a  given Sum
bool checkSubarraySum(int arr[], int n,
                      int k, int sum)
{
    // Consider all blocks starting with i.
    for (int i = 0; i < n - k + 1; i++) {
 
        int current_sum = 0;
 
        // Consider each subarray of size k
        for (int j = 0; j < k; j++)
            current_sum = current_sum + arr[i + j];
 
        if (current_sum == sum)
            return true;       
    }
    return false;
}
 
// Driver code
int main()
{
    int arr[] = { 1, 4, 2, 10, 2, 3, 1, 0, 20 };
    int k = 4;
    int sum = 18;
 
    int n = sizeof(arr) / sizeof(arr[0]);
 
    if (checkSubarraySum(arr, n, k, sum))
        cout << "YES";
    else
        cout << "NO";
 
    return 0;
}


Java
// Java program to check
// if any Subarray of size
// K has a given Sum
class GFG
{
 
// Function to check if any
// Subarray of size K has
// a given Sum
static boolean checkSubarraySum(int arr[], int n,
                                int k, int sum)
{
    // Consider all blocks
    // starting with i.
    for (int i = 0; i < n - k + 1; i++)
    {
 
        int current_sum = 0;
 
        // Consider each
        // subarray of size k
        for (int j = 0; j < k; j++)
            current_sum = current_sum +
                          arr[i + j];
 
        if (current_sum == sum)
            return true;    
    }
    return false;
}
 
// Driver code
public static void main(String args[])
{
    int arr[] = new int[] { 1, 4, 2, 10, 2,
                            3, 1, 0, 20 };
    int k = 4;
    int sum = 18;
 
    int n = arr.length;
 
    if (checkSubarraySum(arr, n, k, sum))
        System.out.println("YES");
    else
        System.out.println("NO");
}
}
 
// This code is contributed
// by Kirti_Mangal


Python3
# Python3 program to check
# if any Subarray of size
# K has a given Sum
 
# Function to check if
# any Subarray of size
# K, has a given Sum
def checkSubarraySum(arr, n, k, sum):
     
    # Consider all blocks
    # starting with i.
    for i in range (n - k + 1):
 
        current_sum = 0;
 
        # Consider each subarray
        # of size k
        for j in range(k):
            current_sum = (current_sum +
                            arr[i + j]);
 
        if (current_sum == sum):
            return True;    
    return False;
 
# Driver code
arr = [1, 4, 2, 10, 2,
          3, 1, 0, 20];
k = 4;
sum = 18;
 
n = len(arr);
 
if (checkSubarraySum(arr, n, k, sum)):
    print("YES");
else:
    print("NO");
 
# This code is contributed by mits


C#
// C# program to check if any
// Subarray of size K has a given Sum
using System;
class GFG
{
 
// Function to check if any Subarray
// of size K has a given Sum
static bool checkSubarraySum(int[] arr, int n,
                             int k, int sum)
{
    // Consider all blocks
    // starting with i.
    for (int i = 0; i < n - k + 1; i++)
    {
 
        int current_sum = 0;
 
        // Consider each
        // subarray of size k
        for (int j = 0; j < k; j++)
            current_sum = current_sum +
                            arr[i + j];
 
        if (current_sum == sum)
            return true;    
    }
    return false;
}
 
// Driver code
static void Main()
{
    int[] arr = new int[] { 1, 4, 2, 10,
                            2, 3, 1, 0, 20 };
    int k = 4;
    int sum = 18;
 
    int n = arr.Length;
 
    if (checkSubarraySum(arr, n, k, sum))
        Console.WriteLine("YES");
    else
        Console.WriteLine("NO");
}
}
 
// This code is contributed
// by mits


PHP


Javascript


C++
// CPP program to check if any Subarray of size
// K has a given Sum
#include 
using namespace std;
 
// Function to check if any Subarray of size K
// has a  given Sum
bool checkSubarraySum(int arr[], int n,
                      int k, int sum)
{
    // Check for first window
    int curr_sum = 0;
    for (int i=0; i


Java
// Java program to check if any Subarray of size
// K has a given Sum
 
class GFG{
// Function to check if any Subarray of size K
// has a given Sum
static boolean checkSubarraySum(int[] arr, int n,
                    int k, int sum)
{
    // Check for first window
    int curr_sum = 0;
    for (int i=0; i


Python3
# Python3 program to check if any
# Subarray of size K has a given Sum
 
# Function to check if any Subarray
# of size K has a given Sum
def checkSubarraySum(arr, n,
                     k, sumV):
    # Check for first window
    curr_sum = 0
    for i in range(0, k):
        curr_sum += arr[i]
    if (curr_sum == sumV):
        return true
 
    # Consider remaining blocks
    # ending with j
    for j in range(k, n):
        curr_sum = (curr_sum + arr[j] -
                               arr[j - k])
        if (curr_sum == sumV) :
            return True   
     
    return False
 
# Driver code
arr = [ 1, 4, 2, 10, 2,
        3, 1, 0, 20 ]
k = 4
sumV = 18
 
n = len(arr)
 
if (checkSubarraySum(arr, n, k, sumV)):
    print("YES")
else:
    print( "NO")
 
# This code is contributed
# by Yatin Gupta


C#
// C# program to check if any Subarray of size
// K has a given Sum
using System;
 
class GFG{
// Function to check if any Subarray of size K
// has a given Sum
static bool checkSubarraySum(int[] arr, int n,
                    int k, int sum)
{
    // Check for first window
    int curr_sum = 0;
    for (int i=0; i


PHP


Javascript


输出:
YES

时间复杂度:O(n * k)
一个有效的解决方案是检查滑动窗口技术并同时检查总和是否等于给定总和。

C++

// CPP program to check if any Subarray of size
// K has a given Sum
#include 
using namespace std;
 
// Function to check if any Subarray of size K
// has a  given Sum
bool checkSubarraySum(int arr[], int n,
                      int k, int sum)
{
    // Check for first window
    int curr_sum = 0;
    for (int i=0; i

Java

// Java program to check if any Subarray of size
// K has a given Sum
 
class GFG{
// Function to check if any Subarray of size K
// has a given Sum
static boolean checkSubarraySum(int[] arr, int n,
                    int k, int sum)
{
    // Check for first window
    int curr_sum = 0;
    for (int i=0; i

Python3

# Python3 program to check if any
# Subarray of size K has a given Sum
 
# Function to check if any Subarray
# of size K has a given Sum
def checkSubarraySum(arr, n,
                     k, sumV):
    # Check for first window
    curr_sum = 0
    for i in range(0, k):
        curr_sum += arr[i]
    if (curr_sum == sumV):
        return true
 
    # Consider remaining blocks
    # ending with j
    for j in range(k, n):
        curr_sum = (curr_sum + arr[j] -
                               arr[j - k])
        if (curr_sum == sumV) :
            return True   
     
    return False
 
# Driver code
arr = [ 1, 4, 2, 10, 2,
        3, 1, 0, 20 ]
k = 4
sumV = 18
 
n = len(arr)
 
if (checkSubarraySum(arr, n, k, sumV)):
    print("YES")
else:
    print( "NO")
 
# This code is contributed
# by Yatin Gupta

C#

// C# program to check if any Subarray of size
// K has a given Sum
using System;
 
class GFG{
// Function to check if any Subarray of size K
// has a given Sum
static bool checkSubarraySum(int[] arr, int n,
                    int k, int sum)
{
    // Check for first window
    int curr_sum = 0;
    for (int i=0; i

PHP


Javascript


输出:
YES

时间复杂度:O(n)