Dev Technology Code Jam

Wednesday was the end of a pretty hectic sprint for a project we are developing, so instead of the usual code reviews that typically occur, we opted to take a couple of hours out of the day to bring the team together and solve an interesting problem. Dev Tech’er Sean Moon found a problem online and we split our Scrum team, and a few other developers who wanted free pizza, into two teams to work through and solve a mathematical problem using Java. The teams took two different approaches with only one of them coming up with a solution that was O(N), but both teams did a great job of working through the problem to find elegant and unique solutions. The discussion generated by reviewing the problem and the solution was well worth our time, and everyone learned a great deal about a few Java libraries, particularly java.util.stream’s IntStream.sum(), and the inefficiencies caused by map reduction for a problem like this. Thanks to all the participates for taking time out of your busy schedules to do some problem solving that really focused on creating mathematically optimized code. We’ll actually be applying some of our newly found knowledge to solve a data migration problem in the upcoming sprint!

The problem is below, and if you come up with a great solution, post it in the comments and we’ll let you know how you did.

The problem:

A zero-indexed array A consisting of N integers is given. An equilibrium index of this array is any integer P such that 0 ≤ P < N and the sum of elements of lower indices is equal to the sum of elements of higher indices, i.e.

A[0] + A[1] + … + A[P−1] = A[P+1] + … + A[N−2] + A[N−1].

Sum of zero elements is assumed to be equal to 0. This can happen if P = 0 or if P = N−1.

For example, consider the following array A consisting of N = 8 elements: