在这个简单的挑战中,将为您提供L
非负整数的输入数组,以及数量b
大于0但不超过的长度的bin L
。您的代码必须返回一个新数组M
,该数组的长度为b
,并且已对该数组进行分箱L
。用示例最容易解释。
L = [1,0,5,1]
然后b = 2
返回M = [1,6]
。
L = [0,3,7,2,5,1]
然后b = 3
返回M = [3,9,6]
。
到目前为止,如此简单。但是,在这个问题b
上并不一定要分开len(L)
。在这种情况下,最后一个垃圾箱将只有更少的数字可以组成。
除可能的最后一个垃圾箱外,每个垃圾箱必须具有相同数量的数字,以构成其总数。最后一个垃圾箱所贡献的号码不得超过其他垃圾箱。在其他规则的约束下,最后一个bin必须具有尽可能多的数字。
L = [0,3,7,2,5,1]
然后b = 4
返回M = [3,9,6,0]
。 M = [10,8,0,0]
是不可接受的输出,因为第三个bin的名称编号不包含在bin 1
和中2
。
L = [0,3,7,2,5]
然后b = 2
返回M = [10,7]
。 M = [3, 14]
不是可接受的输出,因为最后一个bin会有3
贡献的元素,但是第一个只有2
。
L = [1,1,1,1,1,1,1]
然后b = 3
返回M = [3,3,1]
。
作为最后一条规则,您的代码必须在线性时间内运行。
您可以使用任何喜欢的语言或库,并且可以假定以您认为方便的任何方式提供了输入。
事实证明,有些输入无法解决。例如[1,1,1,1,1]
和b=4
。您的代码可以输出任何喜欢的输入。
your code must run in linear time
-我会发现任何自然不遵循这种算法的算法