findSubarraysWithSum function

List<List<int>> findSubarraysWithSum(
  1. List<int> nums,
  2. int target
)

Find Subarrays with Given Sum using HashMap (prefix sum approach).

Implementation

List<List<int>> findSubarraysWithSum(List<int> nums, int target) {
  final result = <List<int>>[];
  final sumToIndices = <int, List<int>>{
    0: [-1],
  };
  var sum = 0;
  for (var i = 0; i < nums.length; i++) {
    sum += nums[i];
    final rem = sum - target;
    if (sumToIndices.containsKey(rem)) {
      for (final start in sumToIndices[rem]!) {
        result.add([start + 1, i]);
      }
    }
    sumToIndices.putIfAbsent(sum, () => []).add(i);
  }
  return result;
}