Open In App

Subarray of size k with given sum

Improve
Improve
Like Article
Like
Save
Share
Report

Given an array arr[], an integer K and a Sum. The task is to check if there exists any subarray with K elements whose sum is equal to the given sum. If any of the subarray with size K has the sum equal to the given sum then print YES otherwise print NO.

Examples

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

A simple solution is to use nested loops, where we check every subarray of size k.

Below is the implementation of the above approach: 

C++




// CPP program to check if any Subarray of size
// K has a given Sum
#include <iostream>
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




<?php
// PHP 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
function checkSubarraySum($arr, $n,
                          $k, $sum)
{
    // Consider all blocks starting with i.
    for ($i = 0; $i < $n - $k + 1; $i++)
    {
 
        $current_sum = 0;
 
        // Consider each subarray of size k
        for ($j = 0; $j < $k; $j++)
            $current_sum = $current_sum +
                           $arr[$i + $j];
 
        if ($current_sum == $sum)
            return true;    
    }
    return false;
}
 
// Driver code
$arr = array(1, 4, 2, 10, 2,
             3, 1, 0, 20);
$k = 4;
$sum = 18;
 
$n = sizeof($arr);
 
if (checkSubarraySum($arr, $n,
                     $k, $sum))
    echo "YES";
else
    echo "NO";
 
// This code is contributed by mits
?>


Javascript




<script>
    // Javascript 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
    function checkSubarraySum(arr, n, k, sum)
    {
     
        // Consider all blocks
        // starting with i.
        for (let i = 0; i < n - k + 1; i++)
        {
 
            let current_sum = 0;
 
            // Consider each
            // subarray of size k
            for (let j = 0; j < k; j++)
                current_sum = current_sum + arr[i + j];
 
            if (current_sum == sum)
                return true;   
        }
        return false;
    }
     
    let arr = [ 1, 4, 2, 10, 2, 3, 1, 0, 20 ];
    let k = 4;
    let sum = 18;
  
    let n = arr.length;
  
    if (checkSubarraySum(arr, n, k, sum))
        document.write("YES");
    else
        document.write("NO");
 
// This code is contributed by mukesh07.
</script>


Output

YES

Time Complexity: O(n * k)

An efficient solution is to check sliding window technique and simultaneously check if the sum is equal to the given sum. 

Implementation:

C++




// CPP program to check if any Subarray of size
// K has a given Sum
#include <iostream>
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<k; i++)
       curr_sum += arr[i];  
    if (curr_sum == sum)
        return true;
 
    // Consider remaining blocks ending with j
    for (int j = k; j < n; j++) {
        curr_sum = curr_sum + arr[j] - arr[j-k];
        if (curr_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)
{
    // Check for first window
    int curr_sum = 0;
    for (int i=0; i<k; i++)
    curr_sum += arr[i];
    if (curr_sum == sum)
        return true;
 
    // Consider remaining blocks ending with j
    for (int j = k; j < n; j++) {
        curr_sum = curr_sum + arr[j] - arr[j-k];
        if (curr_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 mits


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<k; i++)
    curr_sum += arr[i];
    if (curr_sum == sum)
        return true;
 
    // Consider remaining blocks ending with j
    for (int j = k; j < n; j++) {
        curr_sum = curr_sum + arr[j] - arr[j-k];
        if (curr_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




<?php
// PHP 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
function checkSubarraySum($arr, $n,
                          $k, $sum)
{
    // Check for first window
    $curr_sum = 0;
    for ($i = 0; $i < $k; $i++)
    $curr_sum += $arr[$i];
    if ($curr_sum == $sum)
        return true;
 
    // Consider remaining blocks
    // ending with j
    for ($j = $k; $j < $n; $j++)
    {
        $curr_sum = $curr_sum + $arr[$j] -
                                $arr[$j - $k];
        if ($curr_sum == $sum)
            return true;    
    }
    return false;
}
 
// Driver code
$arr = array( 1, 4, 2, 10,
              2, 3, 1, 0, 20 );
$k = 4;
$sum = 18;
 
$n = count($arr);
 
if (checkSubarraySum($arr, $n, $k, $sum))
    echo "YES";
else
    echo "NO";
 
// This code is contributed
// by inder_verma
?>


Javascript




<script>
// Javascript 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
function checkSubarraySum(arr, n,
                        k, sum)
{
    // Check for first window
    let curr_sum = 0;
    for (let i = 0; i < k; i++)
    curr_sum += arr[i];
    if (curr_sum == sum)
        return true;
 
    // Consider remaining blocks
    // ending with j
    for (let j = k; j < n; j++)
    {
        curr_sum = curr_sum + arr[j] -
                                arr[j - k];
        if (curr_sum == sum)
            return true;   
    }
    return false;
}
 
// Driver code
let arr = new Array( 1, 4, 2, 10,
            2, 3, 1, 0, 20 );
let k = 4;
let sum = 18;
 
let n = arr.length;
 
if (checkSubarraySum(arr, n, k, sum))
    document.write("YES");
else
    document.write("NO");
 
// This code is contributed
// by _saurabh_jaiswal
</script>


Output

YES

Time Complexity: O(n)

Related Topic: Subarrays, Subsequences, and Subsets in Array



Last Updated : 01 Sep, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads