# Cracking the coding interview: Subarray with given sum — 6

Given an unsorted array **A **of size **N** that contains only non-negative integers, find a continuous sub-array which adds to a given number **S**.

In case of multiple subarrays, return the subarray which comes first on moving from left to right.

**Example 1:**

**Input:**

N = 5, S = 12

A[] = {1,2,3,7,5}

**Output: **2 4

Explanation: The sum of elements

from 2nd position to 4th position

is 12.

**Example 2:**

**Input:**

N = 10, S = 15

A[] = {1,2,3,4,5,6,7,8,9,10}

**Output: **1 5

Explanation: The sum of elements

from 1st position to 5th position

is 15.

**Your Task:**

You don’t need to read input or print anything. The task is to complete the function **subarraySum**() which takes arr, N and S as input parameters and returns an **arraylist **containing the **starting **and **ending **positions of the first such occurring subarray from the left where sum equals to S. The two indexes in the array should be according to 1-based indexing. If no such subarray is found, return an array consisting only one element that is -1.

**Expected Time Complexity: **O(N)**Expected Auxiliary Space: **O(1)

**Constraints:**

1 <= N <= 105

1 <= Ai <= 109

Solution:

Time complexity: O(n)

Space complexity: O(1)

For this question, in the for loop, both variables, ** num** and

**are created. num is used to store the number of values being added in array list, and sum means the total value of the values being from the list. When**

*sum,***has not yet reached the objective value of s and**

*sum***does not exceed the maximum number of values, then keep adding the index value from the list. Until it reaches**

*num***is equivalent to s, it could eventually add both the beginning index position and ending position into**

*sum***arr2,**then return it. Else, return -1.