Finding equilibrium index of an array in C
Finding equilibrium index of an array
Here, in this section we will learn about Finding equilibrium index of an array in C program. Equilibrium index of an array is an index such that the sum of elements at lower indexes is equal to the sum of elements at higher indexes.
Example
arr[7] : [-4, 3, 0, 2, -7, 1, 5],Index 3 is an euqilibrium index as left_sum = right_sum = -1.
left_sum = -4+3+0 = -1
right_sum = -7+1+5 = -1
Here, we will discuss the following two methods,
- Method 1 : Using Nested loops.
- Method 2 : Using single for loop
- Method 3 : Using Binary search concept.
Method 1 :
- Run a loop from index 0 to n.
- Create a variable say left_sum =0, to find the left indexed value sum.
- Run a loop from index 0 to i to find left_sum.
- Similarly, declare right_sum = 0,
- Run a loop from index i to n, and find right_sum.
- If left_sum == right_sum, return i.
Method 1 : Code in C
#include<stdio.h> void find (int arr[], int n) { int result = -1; for(int i=0; i<n; i++){ int left_sum =0; for(int j=0; j<i; j++) left_sum += arr[i]; int right_sum =0; for(int j=i+1; j<n; j++) right_sum += arr[i]; if(right_sum == left_sum) result = i; } printf("First Point of equilibrium is at index = %d\n", result); return; } int main () { int arr[]={4, -2, 0, 6, -4}; int n = sizeof(arr)/sizeof(arr[0]); find (arr, n); return 0; }
Output
Equilibrium index : 3
Method 2 :
In this method we will use single loop to find the equilibrium point in the array.
Method 2 : Code in C
#include<stdio.h> int equilibrium(int arr[], int n) { int sum = 0; // initialize sum of whole array int leftsum = 0; // initialize leftsum /* Find sum of the whole array */ for (int i = 0; i < n; ++i) sum += arr[i]; for (int i = 0; i < n; ++i) { sum -= arr[i]; if (leftsum == sum) return i; leftsum += arr[i]; } return -1; } // Driver code int main() { int arr[] = { -7, 1, 5, 2, -4, 3, 0 }; int arr_size = sizeof(arr) / sizeof(arr[0]); cout << "First equilibrium index is " << equilibrium(arr, arr_size); return 0; }
Output
Equilibrium index : 3
Method 3 :
- To handle all the testcase, we can use binary search algorithm.
- Calculate the mid and then create left sum and right sum around mid
- if left sum is greater than right sum, move to left until it become equal or less than right sum
- else if right sum is greater than left, move right until it become equal or less than left sum.
- finally we compare two sums if they are equal we got mid as index else its -1
Method 3 : Code in C
#include<stdio.h> void find (int arr[], int n) { int mid = n / 2; int leftSum = 0, rightSum = 0; //calculation sum to left of mid for (int i = 0; i < mid; i++){ leftSum += arr[i]; } //calculating sum to right of mid
for (int i = n - 1; i > mid; i--){ rightSum += arr[i]; } //if rightsum > leftsum if (rightSum > leftSum){ //we keep moving right until rightSum become equal or less than leftSum while (rightSum > leftSum && mid < n - 1){
rightSum -= arr[mid + 1];
leftSum += arr[mid];
mid++;
}
}
else{ //we keep moving right until leftSum become equal or less than RightSum
while (leftSum > rightSum && mid > 0){ rightSum += arr[mid]; leftSum -= arr[mid - 1]; mid--; } } //check if both sum become equal if (rightSum == leftSum){ printf("First Point of equilibrium is at index = %d\n", mid); return; } printf("First Point of equilibrium is at index = -1 "); } int main () { int arr[]={4, -2, 0, 6, -4}; int n = sizeof(arr)/sizeof(arr[0]); find (arr, n); return 0; }
Login/Signup to comment