AlexWD's solution...
function getEquilibriums($arr) {
$equilibriums = array();
for($i = 0, $n = sizeof($arr);$i < $n;++$i) {
if(array_sum(array_slice($arr, 0, $i)) == array_sum(array_slice($arr, $i + 1))) {
$equilibriums[] = $i;
}
}
return $equilibriums;
}
...is OK, but array_sum and array_slice functions are slow on very large long sequences. Moreover it's counting same values several times. It's better to use foreach function like in this simple example:
function getEquilibriums1($arr) {
$right = array_sum($arr);
$left = 0;
$equilibriums = array();
foreach($arr as $key => $value){
$right -= $value;
if(($left) == ($right)) $equilibriums[] = $key;
$left += $value;
}
return $equilibriums;
}
but the best and IMHO the fastest way is to use for statement:
function getEquilibriums2($arr) {
$count = count($arr);
$left = 0;
$right = array_sum($arr);
$equilibriums = array();
for ($i = 0; $i < $count; $i++) {
$right -= $arr[$i];
if ($left == $right) $equilibriums[] = $i;
$left += $arr[$i];
}
return $equilibriums;
}