查找等于给定总和的数组元素[关闭]

Posted

技术标签:

【中文标题】查找等于给定总和的数组元素[关闭]【英文标题】:Find array elements equal to a given sum [closed] 【发布时间】:2012-03-09 05:25:06 【问题描述】:

假设数组是:[1, 2, 5, 7, 10, 13, 17, 21],你必须找到 5 个和等于 31 的数字。算法是什么?

【问题讨论】:

嗯。背包问题。 NP-完全。 这是一个问题吗?首先提及您尝试过什么。 如果你不关心效率,也许只是蛮力它......? NP-complete 意味着 没有 没有有效的解决方案 - 不是真的。你能做的最好的就是蛮力。 嗯,我正在考虑嵌套 for 循环来遍历每个元素并添加它们并将添加的输出存储在变量中并检查它是否等于目标总和。但显然这样不好。所以,正在征求建议。 【参考方案1】:

对于像您这样的小型阵列,效率并不重要。诀窍是让它快速。像这样的东西会起作用(用 Matlab 编写,但它可以很容易地翻译成任何语言):

array=[1, 2, 5, 7, 10, 13, 17, 21];
sum_val=31;

for a=1:(length(array)-4]
for b=(a+1):(length(array)-3)
for c=(b+1):(length(array)-2)
for d=(c+1):(length(array)-1)
for e=(d+1):(length(array)-0)
if array(a)+array(b)+array(c)+array(d)+array(e)=sum_val
fprintf("%i+%i+%i+%i+%i=%i",array(a),array(b),array(c),array(d),array(e),sum_val);
end
end
end
end
end

【讨论】:

谢谢 Pearsonartphoto,实际上那个小数组只是为了举例.. :) @DarkKnight:我想了这么多......可以做很多优化,例如,如果你超过了 sum_value,然后跳到下一个循环,等等。但它是一个开始。 @Pearsonartphoto:(+1) 不是为解决方案,而是为您的照片...;)...真棒摄影..:)

以上是关于查找等于给定总和的数组元素[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

数组中等于 N 的 K 个元素的总和

数组中的两个不同数字,它们的和等于给定值

使用每一行的二维数组中小于或等于 k ​​的最大可能总和

算法题:三个数相加等于某个特定值

给定一个整数数组 nums 和一个整数 k,返回总和等于 k ​​的连续子数组的总数

大厂算法面试:使用移动窗口查找两个不重叠且元素和等于给定值的子数组