我可以使用一些帮助来比较两个以前用另一种方法创建的数组。它们被称为 enterNumbers,用户输入数组和 drawNumbers,一个随机生成的数组。
我的方法头应该是这样的:
public static boolean containSameElements(int[] enterNumbers, int[] drawNumbers)
{
}
该方法应该比较两个数组,如果数字相同,则返回 true,而不管顺序如何。
不寻找答案,也许只是一个开始的地方。
我可以使用一些帮助来比较两个以前用另一种方法创建的数组。它们被称为 enterNumbers,用户输入数组和 drawNumbers,一个随机生成的数组。
我的方法头应该是这样的:
public static boolean containSameElements(int[] enterNumbers, int[] drawNumbers)
{
}
该方法应该比较两个数组,如果数字相同,则返回 true,而不管顺序如何。
不寻找答案,也许只是一个开始的地方。
只需在之前对它们进行排序
Arrays.sort(enterNumbers);
Arrays.sort(drawNumbers);
if(Arrays.equals(enterNumbers, drawNumbers)){
System.out.println("both are same");
}
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();
好吧,你也可以
创建两个直方图(使用基于散列的映射/集合)来计算每个数组中的元素,然后比较集合/映射。这个解决方案是平均O(n)
空间和O(n)
时间。看看或为此。(您想要 Map 或 Set 取决于是否存在重复项是否重要)Map
Set
另一种解决方案是排序和迭代。这是O(nlogn)
最坏的情况。看看Arrays.sort()
这个解决方案。
这是一个非常常见的“问题”,可以使用不同的方法来解决。如果我理解正确,所有数字都在两个数组中,但它们不必位于相同的索引处?
然后,您可以使用(带有两个计数器;每个数组一个)进行 while/for 循环,并检查第一个数组中索引 0 上的数字是否等于第二个数组中的任何数字。如果没有,while/for 循环完成并且测试失败。如果它确实继续到第一个数组中的下一个索引。继续,直到所有内容都被测试(第一个数组中的所有数字与第二个数组中的所有数字)或直到两个数组中都不存在一个数字。祝你好运