【问题标题】:Understanding Pair of Sum and codaddict's algorithm理解 Pair of Sum 和 codaddict 算法
【发布时间】:2015-10-22 06:51:01
【问题描述】:

我指的是之前问过的以下question。而且,我对那里提到的以下解决方案感兴趣:

我正在尝试理解以下整数数组,但在迭代 #5 后我迷路了,如下所示:

假设我们的整数数组是:{1,2,3,4,8,9,10},我们应该打印总和等于 12 的那些对。所以,我尝试逐步分析如果我们应用上述方法会发生什么:

                             Key             Value   
Iteration 1 : i = 0       (12-1) = 11          1 
Iteration 2 : i = 1       (12-2) = 10          2
Iteration 3 : i = 2       (12-3) = 09          3
Iteration 4 : i = 3       (12-4) = 08          4
Iteration 5 : i = 4       // pairs.containsKey is true here so printing 
                             input[i] = 8   

谁能解释我为什么要打印input[i] = 08pairs.get(input[i])) 在上面的迭代#5 中也是08?

其次,就 codaddict 的算法而言,我没有在网上找到任何东西。

【问题讨论】:

  • 哇,看来我应该在这里解释一下!实现与 codeaddict 用户的算法有点不同。

标签: java arrays algorithm


【解决方案1】:

简要查看了您引用的答案。要回答您的问题,

为什么我们在上面的迭代 #5 中打印 input[i] = 08 和 pairs.get(input[i])) 也是 08?

它正在打印input[i],即8pairs.get(input[i]),即pairs.get(8),即4


您需要知道的是,这段 Java 代码并未实现 Codaddict 的逻辑。它看起来有点像,但它只是做了一些不同的事情:Codaddict 将输入值存储为键,将索引存储为值,而 Java 实现将 (sum-value) 存储为键,value 存储为值。

Java 实现并不健全。它在做什么可以简化为:

public static void printSumPairs(int []input, int sum){
    Set<Integer> previousInts = new HashSet<>();

    for (int i : input) {
        if (previousInts.contains(sum - i)) {
             System.out.print("" + (sum - i) + ", " + i);
        } else {
             previousInts.add(i);
        }
    }
}

这基本上实现了与 Java impl 相同的结果,并且(我相信)更容易理解。

但是对于重复的数字不能很好地工作(这与原始 Java impl 相同)。然而,拥有一个处理数字重复的逻辑实际上很容易。

【讨论】:

  • 感谢您的解释。 Sabbir 澄清说 Codaddict 是 Stackoverflow 上的用户名,而不是某些算法的作者。我完全困惑和厌倦了在网上搜索谁是 coddict。
【解决方案2】:

i==4input[i] == 8,但pairs.get(input[i]))pairs.get(8),等于4,因为在上一次迭代中,当我是3时,我们执行pairs.put(k-input[i],input[i]),或者换句话说@987654326 @。

【讨论】:

    【解决方案3】:

    我认为你首先需要了解算法。我们想在数组中找到 sum 为 K 的数字对。

    如果数组中有两个数(x,y)的和为K,则

    x+y = k,
    or y = k-x. 
    

    现在对于数字 x,我们将 x 映射到键 (k-x)

    那么对于另一个数字y,如果我们能找到y在map中,那就意味着有一个数字x (k-x) 被映射,它等于 y。现在从地图中我们可以找到原来的x并打印出来。

    【讨论】:

    • 你能告诉我从哪里可以阅读 codaddicts 的算法吗?
    • 其实 codaaddicts 是 stackoverflow 的用户。他的答案是在那个问题中用 python 写的,并被接受了。他在 python 中的算法被称为 codaaddicts 算法
    • 很好,你澄清了。我以为他和这个算法有关。
    猜你喜欢
    • 2020-07-20
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2020-08-31
    • 2022-12-01
    相关资源
    最近更新 更多