A puzzle I was given:
Write a method that returns the "pivot" index of a list of integers. We define the pivot index as the index where the sum of the numbers on the left is equal to the sum of the numbers on the right. Given [1, 4, 6, 3, 2], the method should return 2, since the sum of the numbers to the left of index 2 is equal to the sum of numbers to the right of index 2 (1 + 4 = 3 + 2). If no such index exists, it should return -1. If there are multiple pivots, you can return the left-most pivot.
You can write the method in any language.
Make sure that the method:
- runs successfully
- handles all edge cases
- is as efficient as you can make it!
Apparently my solution is not efficient enough:
def pivot(arr) results =  arr.each_with_index do |n,index| last = arr.size - 1 sum_left = arr[0..index].inject(:+) sum_right = arr[index..last].inject(:+) results << index if sum_left == sum_right end results.any? ? results.first : -1 end