Esa Mäkinen -4 years ago 109

Ruby Question

I am calculating the sum of array values from each index to end of array. Like so:

`array = [50, 40, 30,20]`

array.map.with_index{|x,i| x = array[i..array.length].reduce(:+) }

=> [140, 90, 50, 20]

Is there any cleaner, ruby-like and more efficent way of doing this? Cumulative array sums are already discussed here.

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

As you mentioned efficient, I am not following your code of `map.with_index`

way: it have time complexity of `O(n^2)`

Inverse cumulative_sum can be done with cumulative_sum and 2 `reverse`

:

```
# cumulative sum with O(n) complexity
# from http://stackoverflow.com/a/1475845/327815
class Array
def cumulative_sum
sum = 0
self.map{|x| sum += x}
end
end
array = [50, 40, 30, 20]
p array.reverse.cumulative_sum.reverse
```

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**

Latest added