【发布时间】:2016-03-09 18:36:06
【问题描述】:
我正在为我正在开发的应用程序编写一些运输功能。其中一项要求是找到最有效的方法来确定哪些物品可以放入盒子中。我们还要求一次只能将两件物品放入任何一个盒子中,并且它们必须完全适合盒子,没有剩余空间。
我们将通过假设盒子和物品的大小是整数(而不是实际尺寸)来简化问题。
我需要编写一个函数,该函数将项目大小数组和盒子大小作为参数,并检查是否有两个项目可以完美地放入盒子中。
例如,假设我们想查看 2 个项目是否能完全填满一个大小为 4 的框。 尺寸为 1 和 2 的 2 件商品将无法使用,因为盒子中有 1 个单位的可用空间。
因此输入 {Item Sizes: [1,2], target: 4} 将返回 false
示例输入和输出:
input: {Item Sizes: [1,3,5], target: 2} output: false
input: {Item Sizes: [1,1,3,5], target: 2} output: true
input: {Item Sizes: [1,3,5], target: 4} output: true
input: {Item Sizes: [1,3,5,4], target: 7} output: true
显然,我可以通过循环运行数组并将每两个数字相加以检查它们是否等于框大小,但我需要一种更有效的方法。如果我们这样做,数组中每个附加项的计算次数都会呈指数增长。例如,给定这些参数...
input: {Item Sizes: [1,3,5,4], target: 7} output: true
如果我没记错的话(1+3、1+5、1+4、3+1、3+5、3+4 等),以这种方式完成它需要 12 次计算。但是,如果我们在数组中再添加一项,像这样......
input: {Item Sizes: [1,3,5,4,6], target: 7} output: true
需要 20 次计算。如果“n”等于数组中的项目数,则公式将是这样的......
n * (n-1)
从“n”中减去一个,因为您无法根据自身检查项目。 检查包含 1000 个项目的数组需要 999000 次计算。
一种优化方法是删除数组中大于框大小的所有整数,并在找到匹配项后立即退出函数。
必须有更好的方法来优化它。任何帮助将不胜感激。
谢谢。
【问题讨论】:
标签: arrays algorithm math logic