Skip to content

Commit b11d92f

Browse files
authored
Merge pull request #10 from Subham1999/back_tracking
Back tracking
2 parents fbac70e + f998aee commit b11d92f

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

52 files changed

+2338
-32
lines changed

.idea/workspace.xml

+137-29
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package com.thealgorithm.array;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
/**
7+
* @author: Subham Santra
8+
*/
9+
public class FindTwonNonOverlappingSubArrays {
10+
public int minSumOfLengths(int[] arr, int target) {
11+
int n = arr.length;
12+
int INF = 1000_000;
13+
int[] prefix = new int[n];
14+
int[] suffix = new int[n];
15+
16+
Map<Integer, Integer> map = new HashMap<>();
17+
18+
int sum = 0;
19+
map.put(0, -1);
20+
for (int i = 0; i < n; ++i) {
21+
int boundary = map.getOrDefault(sum - target, -2);
22+
if (boundary != -2) {
23+
prefix[i] = i - boundary - 1;
24+
} else {
25+
prefix[i] = (i == 0 ? INF : prefix[i - 1]);
26+
}
27+
sum += arr[i];
28+
map.put(sum, i);
29+
}
30+
31+
map.clear();
32+
map.put(0, n);
33+
sum = 0;
34+
35+
for (int i = n - 1; i >= 0; --i) {
36+
sum += arr[i];
37+
int boundary = map.getOrDefault(sum - target, -2);
38+
if (boundary != -2) {
39+
suffix[i] = boundary - i;
40+
} else {
41+
suffix[i] = (i == (n - 1) ? INF : suffix[i + 1]);
42+
}
43+
map.put(sum, i);
44+
}
45+
46+
// System.out.println(Arrays.toString(prefix));
47+
// System.out.println(Arrays.toString(suffix));
48+
49+
for (int i = 1; i < n; ++i) prefix[i] = Math.min(prefix[i - 1], prefix[i]);
50+
for (int i = n - 2; i >= 0; --i) suffix[i] = Math.min(suffix[i + 1], suffix[i]);
51+
52+
int ans = INF;
53+
for (int i = 0; i < n; ++i) {
54+
ans = Math.min(ans, prefix[i] + suffix[i]);
55+
}
56+
return ans == INF ? -1 : ans;
57+
}
58+
59+
public static void main(String[] args) {
60+
61+
System.out.println(
62+
new FindTwonNonOverlappingSubArrays().minSumOfLengths(new int[] {1, 1, 2, 2, 2, 4, 3}, 3));
63+
64+
System.out.println(
65+
new FindTwonNonOverlappingSubArrays().minSumOfLengths(new int[] {4, 3, 2, 6, 2, 3, 4}, 6));
66+
}
67+
}

0 commit comments

Comments
 (0)