我在一次采访中被问到以下问题。虽然我用n元树回答了这个问题,但有人告诉我这还不够好。所以,我很好奇,什么是它的最佳解决方案。
输入:整数数组:[2,3,7]和总和:10
输出:加起来等于和的所有数组元素组合(例如2、2、3、3、7等)
谢了小泰
这个问题可以用动态规划来解决。你有二维dp。假设您在一个名为mem
的数组中执行dp。mem[i][j]将存储通过索引元素j,j1。。。n
(此处n
是数组的大小)。
您有以下关系mem[i][j]=mem[i][j 1]mem[i-a[j]][j 1]
(当然您需要检查i
是否不小于a[j]
)。现在,您可以通过获取mem[S][j]
的值来找到实现和的方法。我建议你试着自己做,如果你想不出来,写一篇评论。
我正在寻找以下问题的答案。 给定一组整数(无重复项)和一个和,找出集合元素的所有可能组合,并求和。解的顺序并不重要(解{2,2,3}和{3,2,2}是相等的)。 请注意,最终组合不需要是集合,因为它可以包含重复。 示例:集合{2,3,5}和10 结果:{2, 2, 2, 2, 2},{2,2,3,3},{2,3,5},{5,5} 我已经研究过子集和问题以及硬币兑换问题,但不能使它们适应我的需要。我
问题内容: 给定一个数组,我们需要找到总和等于数字 X 的所有对。 例如: 问题答案: 解决方案1: 您可以检查每一对数字,并找到总和等于 X。 Java 代码: 解决方案2: 对数组进行排序 * 我们将维护两个索引,一个在开头(l=0),一个在结尾(r=n-1) * 迭代直到 l < r * 检查 arr[l] + arr[r] 是否等于 X * 如果是,则打印该对并执行 l , r– * 如果
问题内容: 给定一个非负整数数组和一个数字。您需要打印总和等于给定整数的子数组的所有开始和结束索引。 例如 : Explanation : [3, 6] [9], [9,0] These all are the subarrays with their sum equal to 9. 问题答案: 解决这个问题的基本蛮力方法是生成给定数组的所有子数组,然后遍历生成的子数组并计算总和,如果这个总和等于
问题内容: 在Unix / Linux中,如何通过命令行找出给定用户所在的组? 问题答案: 要么
的现有元组重载仅限于按索引或类型返回1个元素。想象一下,一个元组包含多个相同类型的元素,你想把它们都提取到一个新的元组中。 如何实现std::get的版本 不确定通过