-4

我可以使用一些帮助来比较两个以前用另一种方法创建的数组。它们被称为 enterNumbers,用户输入数组和 drawNumbers,一个随机生成的数组。

我的方法头应该是这样的:

 public static boolean containSameElements(int[] enterNumbers, int[] drawNumbers)
{

}

该方法应该比较两个数组,如果数字相同,则返回 true,而不管顺序如何。

不寻找答案,也许只是一个开始的地方。

4

4 回答 4

1

只需在之前对它们进行排序

  Arrays.sort(enterNumbers);
  Arrays.sort(drawNumbers);

  if(Arrays.equals(enterNumbers, drawNumbers)){
            System.out.println("both are same");
    }
于 2013-08-08T13:35:06.270 回答
1
if (drawNumbers.length != enterNumbers.length)
    return false;
List<Integer> base = new ArrayList<Integer>();
for (Integer i : drawNumbers)
    base.add(i);
for (Integer i : enterNumbers)
    base.remove(i);

return base.isEmpty();
于 2013-08-08T13:55:37.727 回答
1

好吧,你也可以

  1. 创建两个直方图(使用基于散列的映射/集合)来计算每个数组中的元素,然后比较集合/映射。这个解决方案是平均O(n) 空间和O(n)时间。看看或为此。(您想要 Map 或 Set 取决于是否存在重复项是否重要)MapSet

  2. 另一种解决方案是排序和迭代。这是O(nlogn)最坏的情况。看看Arrays.sort()这个解决方案。

于 2013-08-08T13:31:54.393 回答
0

这是一个非常常见的“问题”,可以使用不同的方法来解决。如果我理解正确,所有数字都在两个数组中,但它们不必位于相同的索引处?

然后,您可以使用(带有两个计数器;每个数组一个)进行 while/for 循环,并检查第一个数组中索引 0 上的数字是否等于第二个数组中的任何数字。如果没有,while/for 循环完成并且测试失败。如果它确实继续到第一个数组中的下一个索引。继续,直到所有内容都被测试(第一个数组中的所有数字与第二个数组中的所有数字)或直到两个数组中都不存在一个数字。祝你好运

于 2013-08-08T13:42:05.900 回答