Subarray range with given sum
Problem Statement - link #
Given an unsorted array of integers and a sum. The task is to count the number of subarray which adds to the given sum.
Your Task: This is a function problem. You only need to complete the function subArraySum() that takes arr, n, sum as parameters and returns the count of subarrays which adds up to the given sum.
Expected Time Complexity: O(n)
Expected Auxiliary Space: O(n)
Examples #
Example 1:
Input:
n = 5
arr[] = {10,2,-2,-20,10}
sum = -10
Output: 3
Explanation: Subarrays with sum -10 are:
[10, 2, -2, -20], [2, -2, -20, 10] and
[-20, 10].
Example 2:
Input:
n = 6
arr[] = {1,4,20,3,10,5}
sum = 33
Output: 1
Explanation: Subarray with sum 33 is:
[20,3,10].
Constraints #
1 <= n <= 10^5-10^5 <= arr[i] <= 10^5-10^5 <= sum <= 10^5
Solutions #
class Solution{
public:
//Function to count the number of subarrays which adds to the given sum.
int subArraySum(int arr[], int n, int sum)
{
//Your code here
int res = 0, csum = 0;
unordered_map<int, int> s;
for(int i=0; i<n; i++){
csum += arr[i];
if(csum == sum) res++;
if(s.find(csum-sum) != s.end())
res += s[csum-sum];
s[csum]++;
}
return res;
}
};