07. Longest Span in two Binary Arrays
β GFG solution to find the longest span where two binary arrays have equal sum in the span. π
The problem can be found here: π Question Link
π§© Problem Description
Given two binary arrays a1[]
and a2[]
of the same size, find the length of the longest span (i, j)
such that the sum of elements from a1[i]
to a1[j]
is equal to the sum of elements from a2[i]
to a2[j]
.
π Examples
Example 1
Input: a1 = [0, 1, 0, 0, 0, 0], a2 = [1, 0, 1, 0, 0, 1]
Output: 4
Explanation: The longest span with same sum is from index 1 to 4.
Example 2
Input: a1 = [0, 1, 0, 1, 1, 1, 1], a2 = [1, 1, 1, 1, 1, 0, 1]
Output: 6
Explanation: The longest span with same sum is from index 1 to 6.
π Constraints
$1 \leq \text{a1.size()} = \text{a2.size()} \leq 10^6$
$a1[i], a2[i] \in {0,1}$
β
My Approach
Prefix Sum and Hash Map of Differences
π‘ Idea:
If the sums of a1
and a2
over some subarray are equal, then the difference of their prefix sums at two indices will be the same.
Detailed Explanation:
Calculate prefix sums for both arrays, but instead of storing separately, compute the difference of prefix sums
diff = prefixSum_a1 - prefixSum_a2
.If at two different indices
i
andj
the difference is the same, it means the subarray(i+1, j)
has equal sums in both arrays.Track the first occurrence of each difference in a hash map.
When you encounter the same difference again, compute the span length and update the maximum span.
Special case: if difference is zero at index
i
, update max span toi + 1
.
This reduces the problem to finding the longest subarray with zero sum in the difference array.
βοΈ Algorithm Steps:
Initialize
maxLen = 0
,sum1 = 0
,sum2 = 0
.Use a hash map
diffMap
to store first occurrence of difference(sum1 - sum2)
.Traverse arrays from
i = 0
ton-1
:Update
sum1 += a1[i]
,sum2 += a2[i]
.Compute
diff = sum1 - sum2
.If
diff == 0
, updatemaxLen = i + 1
.Else if
diff
seen before at indexprevIndex
, updatemaxLen = max(maxLen, i - prevIndex)
.Else store
diff
with current index indiffMap
.
π Time and Auxiliary Space Complexity
Expected Time Complexity: O(n), as we traverse arrays once and perform O(1) average lookups in the hash map.
Expected Auxiliary Space Complexity: O(n), for storing the hash map of prefix sum differences.
π§βπ» Code (C++)
class Solution {
public:
int longestCommonSum(vector<int> &arr1, vector<int> &arr2) {
int n = arr1.size(), res = 0;
unordered_map<int, int> diffMap;
int sum1 = 0, sum2 = 0;
for (int i = 0; i < n; i++) {
sum1 += arr1[i];
sum2 += arr2[i];
int diff = sum1 - sum2;
if (diff == 0) res = i + 1;
else if (diffMap.count(diff)) res = max(res, i - diffMap[diff]);
else diffMap[diff] = i;
}
return res;
}
};
π§βπ» Code (Java)
class Solution {
public int longestCommonSum(int[] arr1, int[] arr2) {
int n = arr1.length, sum1 = 0, sum2 = 0, res = 0;
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
sum1 += arr1[i];
sum2 += arr2[i];
int diff = sum1 - sum2;
if (diff == 0)
res = i + 1;
else if (map.containsKey(diff))
res = Math.max(res, i - map.get(diff));
else
map.put(diff, i);
}
return res;
}
}
π Code (Python)
class Solution:
def longestCommonSum(self, arr1, arr2):
n = len(arr1)
sum1 = sum2 = res = 0
diff_map = {}
for i in range(n):
sum1 += arr1[i]
sum2 += arr2[i]
diff = sum1 - sum2
if diff == 0:
res = i + 1
elif diff in diff_map:
res = max(res, i - diff_map[diff])
else:
diff_map[diff] = i
return res
π§ Contribution and Support
For discussions, questions, or doubts related to this solution, feel free to connect on LinkedIn: π¬ Any Questions?. Letβs make this learning journey more collaborative!
β If you find this helpful, please give this repository a star! β
πVisitor Count
Last updated