Subarray Sums II

Given an array of n integers, your task is to count the number of subarrays having sum x.

Example:

Input:  n = 5, m = 7, arr = {2, -1, 3, 5, -2}
Output: 2

Approach

Java

import java.util.HashMap;

public class SubArraySumII {
    public static void main(String[] args) {
        long n = 5, m = 7;

        long[] arr = { 2, -135, -2 };

        System.out.println(subArraySumII(n, m, arr));

    }

    static long subArraySumII(long nlong mlong[] arr) {

        long ans = 0;
        long cur = 0;
        HashMap<LongLongmp = new HashMap<LongLong>();

        mp.put(cur, mp.getOrDefault(cur, (long0) + 1);

        for (int i = 0; i < n; i++) {
            long x = arr[i];
            cur += x;
            ans += mp.getOrDefault(cur - m, (long0);
            mp.put(cur, mp.getOrDefault(cur, (long0) + 1);
        }
        return ans;
    }

}

C++

#include <bits/stdc++.h>
using namespace std;

long long subArraySumII(long long nlong long m,
                        vector<long long&arr)
{

    long long ans = 0cur = 0;
    map<long longlong longmp;
    mp[cur]++;
    for (long long i = 0i < ni++)
    {
        long long x = arr[i];
        cur += x;
        ans += mp[cur - m];
        mp[cur]++;
    }
    return ans;
}

int main()
{
    long long n = 5m = 7;

    vector<long longarr = {2, -135, -2};

    cout << subArraySumII(nmarr<< "\n";

    return 0;
}


No comments:

Post a Comment