使用给定的整数数组到达目标和的算法,以避免某些数字?

时间:2013-10-16 19:28:32

标签: java arrays algorithm

练习是一个简单的挑战性Java程序。输入包含:

  1. 数组大小“n”,
  2. 阵列A和
  3. 的输入
  4. 另一个大小为“n-1”的数组B的输入
  5. “finalsum”是数组A中所有元素的总和
  6. 最正确的算法是打印正确的顺序,即添加阵列A中的所有元素以达到最终总和,即“最终总和”,这样我们就可以避免求和到数组B中的任何值。

    Inputs: (split to three lines for clarity)
    
    1. 
    
    3             //n, the size of the array
    2 4 6         //array a of size n
    4 8           //array b of size n-1
    
    //finalsum = 2 + 4 + 6 = 12. Similarly for the 2nd input
    
    Output: 0 1 2 (or) 2 1 0 is also correct
            but 1 0 2 is wrong because it cannot add up to 4, since 4 is present in the array b 
    
    2. 
    
    20
    20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
    209 208 207 206 205 204 203 202 201 200 199 198 197 196 195 194 193 192 191
    
    Output: 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (or) many other ways too
    

2 个答案:

答案 0 :(得分:1)

您的算法可能如下所示:

  1. A
  2. 获取元素
  3. 将元素添加到当前总和。检查B
  4. 中是否包含当前金额
  5. 如果当前总和在B,请跳至A
  6. 中的下一个元素
  7. 如果当前总和不在B中,则递归以从A中选择下一个元素(删除当前元素)。
  8. 当选择了A中的所有元素时,返回索引作为解决方案备份堆栈。
  9. 如果A的所有元素都已经过测试而没有解决方案,那么 AND 我们目前处于递归堆栈的最高级别,然后得出结论,没有解决方案。
  10. 这些步骤中的大多数应该相对简单易行。

答案 1 :(得分:0)

为什么我们不能使用所有排列算法的修改形式,其中检查每个步骤中的总和。如果当前总和等于B中的任何元素(为此我们可以使用哈希映射),那么不要继续进行其他操作。

希望我很清楚。

感谢。