Find all subarrays with sum in the given range
Last Updated :
20 Dec, 2022
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++
// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
// Function to find subarrays with sum
// in the given range
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 the sum is in the range then
// insert it into the answer
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;
}
// Driver Code
int main()
{
vector<int> arr = {2, 3, 5, 8};
int L = 4, R = 13;
vector<pair<int,int>> ans;
// Function call
findSubarrays(arr, ans, L, R);
printSubArrays(ans);
return 0;
}
Java
// Java program for the above approach
import java.io.*;
class GFG {
// Function to find subarrays with sum
// in the given range
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 the sum is in the range then
// insert it into the answer
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;
// Function call
findSubarrays(arr, N, L, R);
}
}
// This code is contributed by mudit148.
Python3
# Python3 program for the above approach
# Function to find subarrays with sums
# in the given range
def findSubarrays(arr, N, L, R):
for i in range(N):
sums = 0;
for j in range(i, N):
sums += arr[j];
# If the sums is in the range then
# insert it into the answer
if (sums >= L and sums <= R):
print(i, j);
N = 4;
arr = [ 2, 3, 5, 8 ];
L = 4
R = 13;
# Function call
findSubarrays(arr, N, L, R);
# This code is contributed by phasing17.
C#
// C# program for the above approach
using System;
using System.Collections.Generic;
class GFG {
// Function to find subarrays with sum
// in the given range
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 the sum is in the range then
// insert it into the answer
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;
// Function call
findSubarrays(arr, N, L, R);
}
}
// This code is contributed by phasing17.
JavaScript
// JS program for the above approach
// Function to find subarrays with sum
// in the given range
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 the sum is in the range then
// insert it into the answer
if (sum >= L && sum <= R)
console.log(i + " " + j);
}
}
}
let N = 4;
let arr = [ 2, 3, 5, 8 ];
let L = 4, R = 13;
// Function call
findSubarrays(arr, N, L, R);
// This code is contributed by phasing17.
Output0 1
0 2
1 2
2 2
2 3
3 3
Time complexity: O(N2)
Auxiliary Space: O(N2)
Similar Reads
Print all subarrays with sum in a given range Given an array arr[] of positive integers and two integers L and R defining the range [L, R]. The task is to print the subarrays having sum in the range L to R. Examples: Input: arr[] = {1, 4, 6}, L = 3, R = 8Output: {1, 4}, {4}, {6}.Explanation: All the possible subarrays are the following{1] with
5 min read
Find all subarray index ranges in given Array with set bit sum equal to X Given an array arr (1-based indexing) of length N and an integer X, the task is to find and print all index ranges having a set bit sum equal to X in the array. Examples: Input: A[] = {1 4 3 5 7}, X = 4Output: (1, 3), (3, 4)Explanation: In the above array subarray having set bit sum equal to X (= 4)
15 min read
Find maximum sum by replacing the Subarray in given range Given an array arr[], the task is to find the maximum sum possible such that any subarray of the indices from [l, r] i.e all subarray elements from arr[l] to arr[r] can be replaced with |arr[l] - arr[r]| any number of times. Examples: Input: arr[] = { 9, 1}Output: 16Explanation: The subarray [l, r]
9 min read
Count maximum non-overlapping subarrays with given sum Given an array arr[] consisting of N integers and an integer target, the task is to find the maximum number of non-empty non-overlapping subarrays such that the sum of array elements in each subarray is equal to the target. Examples: Input: arr[] = {2, -1, 4, 3, 6, 4, 5, 1}, target = 6Output: 3Expla
7 min read
Smallest subarray with positive sum for all indices Given an array arr[] of size N. The task is to determine the minimum length of a subarray starting from index i, such that the sum of the subarray is strictly greater than 0. Calculate the length for all i's in the range 1 to N. If no such subarray exists, then return 0. Examples: Input: N = 3, arr[
8 min read