fork download
  1. //count all subarrays with sum equals to k using hashmap
  2. import java.util.*;
  3.  
  4. class Ideone {
  5. public static void main (String[] args) throws java.lang.Exception {
  6. Scanner sc = new Scanner(System.in);
  7.  
  8. int[] arr = {1, 2, 3, -3, -1, 4, 5};
  9. int n = arr.length;
  10.  
  11. int k = 5;
  12.  
  13. Map<Integer, Integer> prefixSumCount = new HashMap<>();
  14. prefixSumCount.put(0, 1);
  15.  
  16. int count = 0;
  17. int sum = 0;
  18.  
  19. for (int i = 0; i < n; i++) {
  20. sum += arr[i];
  21.  
  22. if (prefixSumCount.containsKey(sum - k)) {
  23. count += prefixSumCount.get(sum - k);
  24. }
  25.  
  26. prefixSumCount.put(sum, prefixSumCount.getOrDefault(sum, 0) + 1);
  27. }
  28.  
  29. System.out.println("Number of subarrays with sum " + k + ": " + count);
  30. }
  31. }
  32.  
Success #stdin #stdout 0.18s 58868KB
stdin
5
stdout
Number of subarrays with sum 5: 4