Find all subarrays with sum in the given range
Given an unsorted array of size, N. Find subarrays that add to a sum in the given range L-R.
Examples:
Input: arr[] = {2, 3, 5, 8}, L = 4, R = 13
Output: The indexes of subarrays are {0, 1}, {0, 2}, {1, 2}, {2, 2}, {2, 3}, {3, 3}
Input: arr[] = {1, 4, 6}, L = 3, R = 8
Output: The indexes of subarrays are {0, 1}, {1, 1}, {2, 2}
Naive approach: Follow the given steps to solve the problem using this approach:
- Generate every possible subarray using two loops
- If the sum of that subarray lies in the range [L, R], then push the starting and ending index into the answer array
- Print the subarrays
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void findSubarrays(vector< int > &arr, vector<pair< int , int >> &ans, int L, int R)
{
int N = arr.size();
for ( int i=0; i<N; i++)
{
int sum = 0;
for ( int j=i; j<N; j++)
{
sum += arr[j];
if (sum >= L && sum <= R)
ans.push_back({i, j});
}
}
}
void printSubArrays(vector<pair< int , int >> &ans)
{
int size = ans.size();
for ( int i=0; i<size; i++)
cout<<ans[i].first<< " " <<ans[i].second<<endl;
}
int main()
{
vector< int > arr = {2, 3, 5, 8};
int L = 4, R = 13;
vector<pair< int , int >> ans;
findSubarrays(arr, ans, L, R);
printSubArrays(ans);
return 0;
}
|
Java
import java.io.*;
class GFG {
static void findSubarrays( int arr[], int N, int L,
int R)
{
for ( int i = 0 ; i < N; i++) {
int sum = 0 ;
for ( int j = i; j < N; j++) {
sum += arr[j];
if (sum >= L && sum <= R)
System.out.println(i + " " + j);
}
}
}
public static void main(String[] args)
{
int N = 4 ;
int arr[] = { 2 , 3 , 5 , 8 };
int L = 4 , R = 13 ;
findSubarrays(arr, N, L, R);
}
}
|
Python3
def findSubarrays(arr, N, L, R):
for i in range (N):
sums = 0 ;
for j in range (i, N):
sums + = arr[j];
if (sums > = L and sums < = R):
print (i, j);
N = 4 ;
arr = [ 2 , 3 , 5 , 8 ];
L = 4
R = 13 ;
findSubarrays(arr, N, L, R);
|
C#
using System;
using System.Collections.Generic;
class GFG {
static void findSubarrays( int [] arr, int N, int L,
int R)
{
for ( int i = 0; i < N; i++) {
int sum = 0;
for ( int j = i; j < N; j++) {
sum += arr[j];
if (sum >= L && sum <= R)
Console.WriteLine(i + " " + j);
}
}
}
public static void Main( string [] args)
{
int N = 4;
int [] arr = { 2, 3, 5, 8 };
int L = 4, R = 13;
findSubarrays(arr, N, L, R);
}
}
|
Javascript
function findSubarrays(arr, N, L, R)
{
for (let i = 0; i < N; i++) {
let sum = 0;
for (let j = i; j < N; j++) {
sum += arr[j];
if (sum >= L && sum <= R)
console.log(i + " " + j);
}
}
}
let N = 4;
let arr = [ 2, 3, 5, 8 ];
let L = 4, R = 13;
findSubarrays(arr, N, L, R);
|
Output
0 1
0 2
1 2
2 2
2 3
3 3
Time complexity: O(N2)
Auxiliary Space: O(N2)
Last Updated :
20 Dec, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...