Go Tape Equilibrium
func abs(n int) int {
if n < 0 {
return -n
}
return n
}
func tapeEquilibrium(a []int) int {
firstPart := 0
secondPart := 0
for _, v := range a {
secondPart += v
}
min := math.MaxInt
for i := 0; i < len(a)-1; i++ {
firstPart += i
secondPart -= i
if diff := abs(firstPart - secondPart); diff < min {
min = diff
}
}
return min
}
This keeps left and right running sums and updates the smallest difference at each split point.