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:
// 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 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 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# 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 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 ?> |
<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> |
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:
// 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 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 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# 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 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 ?> |
<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> |
YES
Time Complexity: O(n)
Related Topic: Subarrays, Subsequences, and Subsets in Array