extern crate num; use num::traits::Zero; fn equilibrium_indices(v: &[i32]) -> Vec { let mut right = v.iter().sum(); let mut left = i32::zero(); v.iter().enumerate().fold(vec![], |mut out, (i, &el)| { right -= el; if left == right { out.push(i); } left += el; out }) } fn main() { let v = [-7i32, 1, 5, 2, -4, 3, 0]; let indices = equilibrium_indices(&v); println!("Equilibrium indices for {:?} are: {:?}", v, indices); }