HiveBrain v1.2.0
Get Started
← Back to all entries
patternjavaModerate

Tape Equilibrium

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
tapeequilibriumstackoverflow

Problem

I picked the first test (Tape Equilibrium) from Codility here.

Question:


A non-empty zero-indexed array A consisting of N integers is given.
Array A represents numbers on a tape. Any integer P, such that 0 < P < N,
splits this tape into two non−empty parts:

A[0], A[1], ..., A[P − 1] and A[P], A[P + 1], ..., A[N − 1].




The difference between the two parts is the value of:

|(A[0] + A[1] + ... + A[P − 1]) − (A[P] + A[P + 1] + ... + A[N − 1])|




In other words, it is the absolute difference
between the sum of the first part and the sum of the second part.For
example, consider array A such that:

A[0] = 3
  A[1] = 1
  A[2] = 2
  A[3] = 4
  A[4] = 3




We can split this tape in four places:

P = 1, difference = |3 − 10| = 7 
P = 2, difference = |4 − 9| = 5 
P = 3, difference = |6 − 7| = 1 
P = 4, difference = |10 − 3| = 7




Write a function: int solution(int A[], int N); that, given a
non-empty zero-indexed array A of N integers, returns the minimal
difference that can be achieved.

This is how I implemented it. I got 50% with complexity N*N. How could I make it cleaner?

```
// you can also use imports, for example:
import java.math.*;
import java.util.*;
import java.lang.*;
class Solution {
public int solution(int[] A) {
// write your code in Java SE 7
int sizeOfArray = A.length;
int smallest = Integer.MAX_VALUE;
int result = 0;
for(int i=1;i<sizeOfArray;i++){
int difference = Math.abs(sumOfArray(subArray(0,i,A))-
sumOfArray(subArray(i,sizeOfArray,A)));
//System.out.println("difference"+difference);
result = Math.min(smallest,difference);
smallest = result;
}

return result;
}

public int sumOfArray(int[] arr) {
int sum=0;
for(int i:arr) {
sum += i;
}

return sum;
}

public int[] subArray(int begin, int end, int[] a

Solution

Naming

The Java naming convention for arguments is camelCase. You should rename this argument A here:

public int solution(int[] A)


It would be best to make it look like the following code, or use a better name that would fit your needs:

public int solution(int[] arrayA)


I don't have anything against a variable named arr for an int [], but you're using arr and array in different methods. I would recommend to stick to one name, or try to find less generic name if they mean different things.

Formatting

Your formatting is very good in general, and you're consistent. Some times, you could use a little bit of white-space.

for(int i=1;i<sizeOfArray;i++)


You could add some spaces to clearly define the three part of the for-loop:

for(int i=1; i<sizeOfArray; i++)


I will not evaluate your algorithm, since this is not my forte.

Code Snippets

public int solution(int[] A)
public int solution(int[] arrayA)
for(int i=1;i<sizeOfArray;i++)
for(int i=1; i<sizeOfArray; i++)

Context

StackExchange Code Review Q#44371, answer score: 15

Revisions (0)

No revisions yet.