如何均匀地分割一组数字

Bla*_*ton 5 php arrays sorting numbers

假设我有数组:

array(1,1,2,1,4,5,7,2,3);
Run Code Online (Sandbox Code Playgroud)

将这些数字放入 x 数组(我们将使用 3)并使这些数字尽可能与末尾的较大数字相等的最快方法是什么?

例子:

array(1, 1, 1, 5);
array(7, 2);
array(4, 2, 3);
Run Code Online (Sandbox Code Playgroud)

我担心这可能是 ap=np 问题,但它看起来很简单,不应该如此。我只是似乎无法弄清楚。

类似问题:将数组拆分为 P 个平衡和子数组的算法

mat*_*one 2

不完全是您正在寻找的内容,但这应该可以帮助您入门:

$array = array(1,1,2,1,4,5,7,2,3);

asort($array);

$total = array_sum($array);

$array1 = array();
$array2 = array();
$array3 = array();

foreach($array as $number) {
    if(array_sum($array1) < round($total / 3)) {
        array_push($array1, $number);
    } elseif(array_sum($array2) < round($total / 3)) {
        array_push($array2, $number);
    } else {
        array_push($array3, $number);
    }
}

for($i = 1; $i <= 3; $i++) {

    switch($i) {
        case 1:
            $op1 = 2;
            $op2 = 1;
            break;
        case 2:
            $op1 = -1;
            $op2 = 1;
            break;
        case 3:
            $op1 = -2;
            $op2 = -1;
            break;
    }

    foreach(${'array' . $i} as $number) {
        if((array_sum(${'array' . ($i + $op1)}) + $number) == round($total / 3)) {
            unset(${'array' . $i}[array_search($number, ${'array' . $i})]);
            array_push(${'array' . ($i + $op1)}, $number);
        } elseif((array_sum(${'array' . ($i + $op2)}) + $number) == round($total / 3)) {
            unset(${'array' . $i}[array_search($number, ${'array' . $i})]);
            array_push(${'array' . ($i + $op2)}, $number);
        }
    }
}

print_r($array1);
print_r($array2);
print_r($array3);
Run Code Online (Sandbox Code Playgroud)

新输出:

Array
(
    [0] => 1
    [1] => 1
    [2] => 1
    [4] => 2
    [5] => 3
)
Array
(
    [0] => 4
    [1] => 5
)
Array
(
    [0] => 7
    [1] => 2
)
Run Code Online (Sandbox Code Playgroud)