Skip to content

Commit f7bb8fe

Browse files
author
Tushar Roy
committed
longest common span of same sum
1 parent 6ad02c6 commit f7bb8fe

File tree

2 files changed

+75
-0
lines changed

2 files changed

+75
-0
lines changed

python/array/longestsamesumspan.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# http://www.geeksforgeeks.org/longest-span-sum-two-binary-arrays/
2+
3+
def longest_span(input1, input2):
4+
if len(input1) != len(input2):
5+
raise ValueError;
6+
7+
diff = {}
8+
prefix1 = 0
9+
prefix2 = 0
10+
max_span = 0
11+
for i in range(len(input1)):
12+
prefix1 += input1[i]
13+
prefix2 += input2[i]
14+
curr_diff = prefix1 - prefix2
15+
if curr_diff in diff:
16+
max_span = max(max_span, i - diff[curr_diff])
17+
else:
18+
diff[curr_diff] = i
19+
return max_span
20+
21+
if __name__ == '__main__':
22+
input1 = [0, 1, 0, 1, 1, 1, 1]
23+
input2 = [1, 1, 1, 1, 1, 0, 1]
24+
25+
print(longest_span(input1, input2))
26+
27+
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.interview.array;
2+
3+
import java.util.HashMap;
4+
import java.util.Map;
5+
6+
/**
7+
* Date 12/29/2015
8+
* @author Tushar Roy
9+
*
10+
* Give two arrays of same size consisting of 0s and 1s find span (i, j) such that
11+
* sum of input1[i..j] = sum of input2[i..j]
12+
*
13+
* Time complexity O(n)
14+
* Space complexity O(n)
15+
*
16+
* http://www.geeksforgeeks.org/longest-span-sum-two-binary-arrays/
17+
*/
18+
public class LongestSameSumSpan {
19+
20+
public int longestSpan(int input1[], int input2[]) {
21+
if (input1.length != input2.length) {
22+
throw new IllegalArgumentException("Not same length input");
23+
}
24+
Map<Integer, Integer> diff = new HashMap<>();
25+
int prefix1 = 0, prefix2 = 0;
26+
int maxSpan = 0;
27+
for (int i = 0; i < input1.length ; i++) {
28+
prefix1 += input1[i];
29+
prefix2 += input2[i];
30+
int currDiff = prefix1 - prefix2;
31+
if (diff.containsKey(currDiff)) {
32+
maxSpan = Math.max(maxSpan, i - diff.get(currDiff));
33+
} else {
34+
diff.put(currDiff, i);
35+
}
36+
}
37+
return maxSpan;
38+
}
39+
40+
public static void main(String args[]) {
41+
int input1[] = {0, 1, 0, 1, 1, 1, 1};
42+
int input2[] = {1, 1, 1, 1, 1, 0, 1};
43+
44+
LongestSameSumSpan lsss = new LongestSameSumSpan();
45+
System.out.print(lsss.longestSpan(input1, input2));
46+
}
47+
48+
}

0 commit comments

Comments
 (0)