Skip to content

Instantly share code, notes, and snippets.

@StefanLage
Last active March 31, 2022 19:59
Show Gist options
  • Save StefanLage/9274577 to your computer and use it in GitHub Desktop.
Save StefanLage/9274577 to your computer and use it in GitHub Desktop.
Technical Interview : Equilibrium index of an Array
int equilibrium (int A[], int n){
int sum = 0;
int solution = -1;
int leftSum = 0;
int rightSum = 0;
// Calculate the sum of all P in A
for (int i = 0; i < n; i++)
sum += A[i];
// Try to find an equilibrium -> if yes return the first one
for (int i = 0; i < n; i++){
rightSum = sum - leftSum - A[i];
if(rightSum == leftSum)
return i;
leftSum += A[i];
}
return -1;
}
Recently I had a technical interview where I was suppose to solve the problem that I explain below.
I show you which was my algorithm, not the best but it works well in most cases.
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.
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 oonsisting of N = 7 elements:
A[0] = -7 A[1] = 1 A[2] = 5
A[3] = 2 A[4] = -4 A[S] = 3
A[6] = 0
P = 3 is an equilibrium index of this array, because:
- A[0] + A[1] + A[2] = A[4] + A[S] + A[6]
P = 6 is also an equilibrium index, because:
- A[0] + A[1] + A[2] + A[3] + A[4] + A[S] = 0
and there are no elements with indices greater than 6.
P = 7 is not an equilibrium index, because it does not fulfill the condition 0 <= P < N.
Write a function (I chose C implement)
int equilibrium(int A[], int n);
that, given a zero-indexed array A consisting of N integers, returns any of its equilibrium indices. The function should return -1 if no equilibrium index exists.
Assume that:
- N is an integer within the range [0..10,000,000];
- each element of array A is an integer within the range [-2,147,483,648.2,147,483,647].
For example, given array A such that
A[0] = -7 A[1] = 1 A[2] = 5
A[3] = 2 A[4] = -4 A[5] = 3
A[6] = 0
the function may return 3 or 6, as explained above.
Complexity:
- expected worst-case time complexity is 0(N);
- expected worst-case space complexity is O(N), beyond input storage (not counting the storage required for input arguments).
@jkparuchuri
Copy link

This is failing for large numbers in array due to overflow, need to use long for all sum variables

@dsidirop
Copy link

dsidirop commented Nov 6, 2018

This is failing for large numbers in array due to overflow, need to use long for all sum variables

Even if you do use 'long' you will still run into the same problem. Imagine adding 100.000 max-ints into a long. One needs to come up with a smarter solution.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment