【问题标题】:Finding the difference between two int arrays查找两个 int 数组之间的差异
【发布时间】:2016-12-06 16:22:35
【问题描述】:

我无法找出找出两个整数数组之间差异的算法。 我已经有一个排序方法,它将被运行,所以数字是升序的。

例如:

SetX = { 1, 2, 3, 4, 5 }

SetY = { 0, 2, 4, 6 }

返回的应该是 SetX 中没有出现在 SetY 中的数字。

所以 resultSet = { 1, 3, 5 }

如果我做小数组,有时我会得到正确的答案,但如果我做 4 个或更多整数长的数组,它会给我错误的回报。

有人可以查看我的代码并告诉我我做错了什么吗?

public static int firstFruit(int[] setX, int usedSizeSetX, int[] setY, int usedSizeSet2, int[] resultSet) {
    int a = 0, b = 0, c = 0;

    while( a < usedSizeSetX && b < usedSizeSetY){
        if(setX[a] == setY[b]) {
            a++;
        } else if(setX[a] == setY[b]){
            b++;
        } else {
            resultSet[c++] = setX[a++];
            b++;
        }
    }
    return c;
}

【问题讨论】:

  • 你能给出一些输入错误的例子吗?
  • 您的前两次检查完全相同。你永远不会进入第二个条件......
  • Here 列出了类 Array 提供的所有方法。对于一个数组中的每个元素,您可以使用 binsearch 来查找它是否出现在另一个数组中。
  • apache 公共库有CollectionUtils.disjunction()
  • 你的算法背后的逻辑是什么?我注意到您在if 和else if (setX[a] == setY[b]) 中检查了两次相同的条件.. 这没有意义.. 可能是错字?

标签: java arrays set-difference


【解决方案1】:

我认为你的条件句有点 FUBAR。处理应该是:

  1. 如果 setX[a] > setY[b] -> b++
  2. 如果 setX[a] a++
  3. Else -> 将 setX[a] 添加到结果中,a++, b++

【讨论】:

  • 请您通俗地解释一下。我认为多个计数器让我感到困惑。
  • @Pableto 我建议您使用您提供的示例数组并自己浏览它。在一张纸上写下每一步会很有用。
猜你喜欢
  • 2020-01-11
  • 2018-01-07
  • 2019-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2015-03-19
  • 1970-01-01
相关资源
最近更新 更多