-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathTapeEquilibrium.java
42 lines (34 loc) · 1.38 KB
/
TapeEquilibrium.java
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
// you can also use imports, for example:
// import java.util.*;
// you can write to stdout for debugging purposes, e.g.
// System.out.println("this is a debug message");
class Solution {
public int solution(int[] A) {
// cumulative approach works - two passes
// first pass (left to right): at each point we can store left sum for that point
// .. no additional space is required, we can update array A
// .. since an element is equal to its diff with its left element (calculatable)
// second point (right to left): at each point we can calculate right sum (no need to store)
// .. and since both left and right sums known at second pass, take diff and search for min
// first pass
calculateLeftSums(A);
// second pass
return findMinDiffPoint(A);
}
private void calculateLeftSums(int[] A) {
// sure A has at least 2 elements from task spec
for(int i=1; i<A.length; i++) {
A[i] += A[i-1];
}
}
private int findMinDiffPoint(int[] A) {
int minDiff = Integer.MAX_VALUE;
int rightSum = 0;
for(int i=A.length -1; i > 0; i--) {
rightSum += A[i] - A[i-1];
int diff = Math.abs( rightSum - A[i-1] );
if( diff < minDiff ) {minDiff = diff;}
}
return minDiff;
}
}