Разбейте массив на три одинаковых суммы

Я хотел бы разбить массив на три массива, которые имеют одинаковые суммы — как можно ближе

У меня есть массив

$arr = [1,2,4,7,1,6,2,8];

Желание вывода, например:

a = 8,2 // as sum is 10
b = 7,2,1 // as sum is 10
c = 6,4,1 // as sum is 10

Спасибо

1

Решение

Вы можете использовать следующий алгоритм:

  1. Сортировать входной массив от большого к маленькому
  2. Создать выходной массив
  3. для каждого элемента на входе — вставить в самую низкую сумму в выходном массиве.

Рассмотрим следующий код:

$arr = [1,2,4,7,1,6,2,8];
sort($arr);
$arr = array_reverse($arr); // big to small
$out = array(array(),array(),array()); // output array

for($i = 0; $i < 8; $i++) {
$sums = array_map("array_sum" ,$out); // get all current sums of the array
$index = array_keys($sums, min($sums))[0]; // get the min sum
$out[$index][] = $arr[$i]; // add the element to the array with the lowest sum
}

echo print_r($out, true);

Теперь вы получите:

array:
[0]: array:
[0] => 8
[1] => 2
[2] => 1
[1]: array:
[0] => 7
[1] => 2
[2] => 1
[2]: array:
[0] => 6
[1] => 4
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]