Skip to content

Equal Sides Of An Array in Java

The challenge

You are going to be given an array of integers. Your job is to take that array and find an index N where the sum of the integers to the left of N is equal to the sum of the integers to the right of N. If there is no index that would make this happen, return -1.

For example:

Let’s say you are given the array {1,2,3,4,3,2,1}:
Your function will return the index 3, because at the 3rd position of the array, the sum of left side of the index ({1,2,3}) and the sum of the right side of the index ({3,2,1}) both equal 6.

Let’s look at another one.

You are given the array {1,100,50,-51,1,1}:
Your function will return the index 1, because at the 1st position of the array, the sum of left side of the index ({1}) and the sum of the right side of the index ({50,-51,1,1}) both equal 1.

Last one:

You are given the array {20,10,-80,10,10,15,35}
At index 0 the left side is {}
The right side is {10,-80,10,10,15,35}
They both are equal to  when added. (Empty arrays are equal to 0 in this problem)
Index 0 is the place where the left side and right side are equal.

Note: Please remember that in most programming/scripting languages the index of an array starts at 0.

Input:

An integer array of length 0 < arr < 1000. The numbers in the array can be any integer positive or negative.

Output:

The lowest index N where the side to the left of N is equal to the side to the right of N. If you do not find an index that fits these rules, then you will return -1.

Note:

If you are given an array with multiple answers, return the lowest correct index.

See also  Calculate the Volume of a Cuboid in Java

The solution in Java code

Option 1:

public class Solution { public static int findEvenIndex(int[] arr) { int sum = , cSum = ; for (int i = ; i < arr.length; i++) sum += arr[i]; for(int i = ; i < arr.length; i++){ if (cSum == sum - arr[i]) return i; cSum += arr[i]; sum -= arr[i]; } return -1; } }
Code language: Java (java)

Option 2:

import java.util.Arrays; public class Solution { public static int findEvenIndex(int[] arr) { int left = ; int right = Arrays.stream(arr).sum(); for (int i=; i<arr.length; i++){ right -= arr[i]; if (left == right) return i; left += arr[i]; } return -1; } }
Code language: Java (java)

Option 3:

import java.util.stream.IntStream; public class Solution { public static int findEvenIndex(int[] arr) { return IntStream.range(, arr.length) .filter(n -> IntStream.of(arr).limit(n).sum() == IntStream.of(arr).skip(n + 1).sum()) .findFirst().orElse(-1); } }
Code language: Java (java)

Test cases to validate our solution

import static org.junit.Assert.*; import java.util.ArrayList; import org.junit.Test; public class SolutionTest { @Test public void test() { assertEquals(3,Solution.findEvenIndex(new int[] {1,2,3,4,3,2,1})); assertEquals(1,Solution.findEvenIndex(new int[] {1,100,50,-51,1,1})); assertEquals(-1,Solution.findEvenIndex(new int[] {1,2,3,4,5,6})); assertEquals(3,Solution.findEvenIndex(new int[] {20,10,30,10,10,15,35})); assertEquals(-1,Solution.findEvenIndex(new int[] {-8505, -5130, 1926, -9026})); assertEquals(1,Solution.findEvenIndex(new int[] {2824, 1774, -1490, -9084, -9696, 23094})); assertEquals(6,Solution.findEvenIndex(new int[] {4, 5, 6, 7, 8, 9, 10, 9, 8, 7, 6, 5, 4})); } }
Code language: Java (java)

Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x