Repository navigation
Expand file tree
/
Copy pathSubarrayWithSum.java
More file actions
62 lines (47 loc) · 1.56 KB
/
Copy pathSubarrayWithSum.java
File metadata and controls
62 lines (47 loc) · 1.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.abn.scaler.dsa.day49;
import java.util.Arrays;
/*
Given an array of positive integers A and an integer B, find and return first continuous subarray which adds to B.
If the answer does not exist return an array with a single integer "-1".
First sub-array means the sub-array for which starting index in minimum.
A = [1, 2, 3, 4, 5]
B = 5
[2, 3]
A = [5, 10, 20, 100, 105]
B = 110
[-1]
*/
public class SubarrayWithSum {
public int[] solve(int[] array, int B) {
int minSize = Integer.MAX_VALUE;
int start = 0;
int size;
int subSum = 0;
int startIndex;
int endIndex;
for (int i = 0; i < array.length; i++) {
subSum = subSum + array[i];
while (subSum >= B) {
size = i - start + 1;
minSize = Math.min(size, minSize);
if (subSum == B) {
startIndex = start;
endIndex = i;
int index = 0;
int[] result = new int[size];
for(int j = startIndex; j <= endIndex; j++) {
result[index ++] = array[j];
}
return result;
}
subSum = subSum - array[start];
start++;
}
}
return new int[] {-1};
}
public static void main(String[] args) {
SubarrayWithSum subarrayWithSum = new SubarrayWithSum();
System.out.println(Arrays.toString(subarrayWithSum.solve(new int[] { 1, 2, 3, 4, 5}, 5)));
}
}