【问题标题】:How to calculate the element of the array?如何计算数组的元素?
【发布时间】:2014-02-19 20:50:43
【问题描述】:

我有一个类似下面的数组

 $array = array(1,2,4,7,1,6,2,8);

我想将数组分成 3 组,每组的总和需要尽可能相等。

所以结果是

8,2    = 10
7,2,1  = 10
6,4,1  = 11

我试过了:

$array = array(1,2,4,7,1,6,2,8);   
   $total = array_sum($array);
   $setNumber = $total/3;

   for($i; $i<count($array); $i++){
       $group += $array[$i]
        if($group > $setNumber){
           break;
        }
   }

我不确定如何完成这项任务。任何人都可以帮助我吗?谢谢!

【问题讨论】:

  • 关闭者:您为什么认为这个问题很宽泛?解决方案可能很多,但问题很容易回答,甚至有一个赞成的答案,那你为什么要尝试关闭它?
  • 我认为你应该尝试一些javascript教程http://stackoverflow.com/questions/22736885/how-to-define-my-variable-structure

标签: php


【解决方案1】:

我只需对 $array 进行排序,然后开始将项目从最大数向下添加到最小的组中。这可能不是最好的结果,但至少它保持在 O(n) 内。我期待着更好的答案。

$arr1 = $arr2 = $arr3 = array();
$sum1 = $sum2 = $sum3 = 0;
sort($array);
for($i=count($array)-1; $i>=0; --$i) {
  if($sum1<=$sum2 && $sum1<=$sum3) { $arr1[] = $array[$i]; $sum1+= $array[$i]; }
  else if($sum2<=$sum1 && $sum2<=$sum3) { $arr2[] = $array[$i]; $sum2+= $array[$i]; }
  else if($sum3<=$sum1 && $sum3<=$sum2) { $arr3[] = $array[$i]; $sum3+= $array[$i]; }
}

【讨论】:

  • 这也是我会采用的方法,“背包”问题最能描述这个问题。
猜你喜欢
  • 2016-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-01
  • 2011-09-01
  • 1970-01-01
相关资源
最近更新 更多