An algorithm to find the element in array such that the sum of its left elements is equal to the sum of its right elements in javascript.

Example

Input: [2, 1, 9 ,3] [1, 2, 3] Output: 9 -1

Element on the left ( 2+1 ) subarray and right ( 3 ) subarray of 9 are equal.

We are going to see three different solution for this problem.

Method 1: Brute Force approach.

Implementation

We are going to use two nested loops.

In the outer loop start from the second element in the array.

Then calculate its left and right sum and check them if they are equal or not.

let solution1 = (arr, n = arr.length) => { //Return if there is only one element in the array if(arr.length === 1){ return arr[0]; } for(let i = 1; i < n; i++){ //Calculate the left sum for the current element let leftSum = 0; for(let j = i-1; j >= 0; j--){ leftSum += arr[j]; } //Calculate the right sum for the current element let rightSum = 0; for(let k = i+1; k < n; k++){ rightSum += arr[k]; } //If equal then return the elm if(leftSum === rightSum){ return arr[i]; } } return -1; }

Input: console.log(solution1([2, 7, 3, 5, 2, 2])); Output: 3

Time complexity: O(n ^ 2).

Space complexity: O(1).

Method 2: In O(n) but with extra space.

Implementation

We are going to use two different arrays to calculate and store the left sum and right sum of each elements.

Then compare the left and right sum for each elements.

let solution2 = (arr, n = arr.length) => { //Return if there is only one element in the array if(arr.length === 1){ return arr[0]; } //Calculate the left sum for each element let prefixSum = []; prefixSum[0] = arr[0]; for(let i = 1; i < n; i++){ prefixSum[i] = prefixSum[i - 1] + arr[i]; } //Calculate the right sum for each element let suffixSum = []; suffixSum[n-1] = arr[n-1]; for(let i = n-2; i >= 0; i--){ suffixSum[i] = suffixSum[i + 1] + arr[i]; } //Check the left sum and right sum for each element for(let i = 0; i < n; i++){ if(prefixSum[i] === suffixSum[i]){ return arr[i]; } } return -1 }

Input: console.log(solution2([2, 3, 4, 1, 4, 5])); Output: 1

Time complexity: O(n).

Space complexity: O(n).

Method 3: Best approach, Time and space efficient.

Implementation to find the element with equal left and right sum.

We are going to first calculate the sum of all the elements on the right of the first element in the array.

Then start calculating the left sum, while calculating it we will add the element to the left sum and subtract it from right sum.

Every time we will check if left sum is equal to right sum or not and return the element if they are equal.

let solution3 = (arr, n = arr.length) => { //Return if there is only one element in the array if(arr.length === 1){ return arr[0]; } let leftSum = 0, rightSum = 0; //Calculate the sum of all the right elements for(let i = 1; i < n; i++){ rightSum += arr[i]; } //Now subtract the element from the right sum //And add to the element to the left sum //Check if the rightSum === leftSum for(let i = 0, j = 1; j < n; i++, j++){ rightSum -= arr[j]; leftSum += arr[i]; if(rightSum === leftSum){ return arr[i+1]; } } return -1; }

Input: console.log(solution2([2, 3, 4, 1, 4])); Output: 4

Time complexity: O(n).

Space complexity: O(1).