Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将非负值数组拆分为尽可能多的组,每个组的总和>;=给定值_Arrays_Algorithm - Fatal编程技术网

Arrays 将非负值数组拆分为尽可能多的组,每个组的总和>;=给定值

Arrays 将非负值数组拆分为尽可能多的组,每个组的总和>;=给定值,arrays,algorithm,Arrays,Algorithm,例如,如果我们有一个数组[4,1,2,5,2,3],最小组和为5 则以下分组符合要求: [1,2,4],[2,3],[5] 我认为这是我们能做的最好的了,也就是说,我们不能在不打破限制的情况下将数组分成4个或更多的组 我能想到的这个问题的解决方案是首先对数组进行排序,然后从最大值开始处理数组 如果大于等于最小值,则它已构成一个组 如果小于最小值,请首先将其注册到临时组中,然后查看排序数组的另一端。从尚未分组的最小值开始,我们反复向组中添加值,直到组和等于或大于最小值 重复上述两个步骤,直到不再

例如,如果我们有一个数组[4,1,2,5,2,3],最小组和为5

则以下分组符合要求:

[1,2,4],[2,3],[5]

我认为这是我们能做的最好的了,也就是说,我们不能在不打破限制的情况下将数组分成4个或更多的组

我能想到的这个问题的解决方案是首先对数组进行排序,然后从最大值开始处理数组

  • 如果大于等于最小值,则它已构成一个组
  • 如果小于最小值,请首先将其注册到临时组中,然后查看排序数组的另一端。从尚未分组的最小值开始,我们反复向组中添加值,直到组和等于或大于最小值
  • 重复上述两个步骤,直到不再消耗任何元素,即所有剩余元素的总和小于最小值。作为最后一步,我们将所有这些元素添加到任何现有组中
再次以前面的数组为例。我们首先将其分类为[1,2,2,3,4,5]:

  • 5可分为一个单独的组
  • 4小于5,因此我们将最小的未分组值1添加到其中,并形成一个新的组
  • 同样,第3组和第2组
  • 2是唯一剩下的元素。我们可以把它放入任何现有的组中
  • 我不确定这种看似贪婪的方法是否有效,但我想不出一个反例。不确定性在于第三步。我们是否有可能从现有组中提取一个或多个元素,并将它们与剩余的未分组值组合,以创建一个或多个组


    我想知道我的解是正确的还是其他任何有效的解(最好是在多项式时间内)。

    对于数组[2,3,4,4,5]和组和=9,你的算法会做什么?很好的例子。它确实不起作用,因为它最终将是一个1组分区。