gpt4 book ai didi

java - 如何确定数组是否包含单独数组中的所有整数

转载 作者:太空宇宙 更新时间:2023-11-04 13:08:33 25 4
gpt4 key购买 nike

我正在学校的计算机科学课上,我被这个问题困扰了。并且无法真正想出如何解决它的想法。

这是逐字逐句:编写一个名为 contains 的静态方法,该方法接受两个整数数组 a1 和 a2 作为参数,并返回一个 boolean 值,指示 a2 的元素序列是否出现在 a1 中(true 表示是,false 表示否)。 a2 中的元素序列可以出现在 a1 中的任何位置,但必须连续且以相同的顺序出现。例如,如果名为 list1 和 list2 的变量存储以下值:

int[] list1 = {1, 6, 2, 1, 4, 1, 2, 1, 8};
int[] list2 = {1, 2, 1};

那么 contains(list1, list2) 的调用应返回 true,因为 list2 的值序列 {1, 2, 1} 包含在从索引 5 开始的 list1 中。如果 list2 存储了值 {2, 1, 2},则 contains(list1, list2) 的调用将返回 false,因为 list1 不包含该值序列。任何两个具有相同元素的列表都被视为相互包含,因此诸如 contains(list1, list1) 之类的调用应返回 true。

您可能会假设传递给您的方法的两个数组的长度都至少为 1。您不能使用任何字符串来帮助您解决此问题,也不能使用生成字符串的方法(例如 Arrays.toString)。

如果有人能指出我正确的方向,那就太好了。

这也是我想到的一次尝试,但没有足够数量的测试

public static boolean contains(int[] set1, int[] set2) {
boolean contains = false;
for (int i = 0; i < set1.length; i++) {
for (int a = 0; a < set2.length - 1; a++) {
if (set1[i] == set2[a] && set1[i + 1] == set2[a + 1]) {
contains = true;
} else {
contains = false;
}
}
}
return contains;
}

最佳答案

这是执行此操作的递归方法:

public static boolean contains(int[] set1, int[] set2) {
//System.out.println(Arrays.toString(set1) + " " + Arrays.toString(set2));

//set 2 cannot be contained within set 1 because there aren't
//enough elements. This either means that we recursed too deep
//within the first set that there are not enough elements, or
//there were not enough elements to begin with.
if (set1.length < set2.length) return false;

//from the start of each set, count the number of matches in order
int numMatched = 0;
while (numMatched < set2.length && set1[numMatched] == set2[numMatched]) {
numMatched++;
}

if (numMatched == set2.length)
//the number of matches found equals the length of the set to
//search for, so we have found a match. Return true to unravel
//the recursion.
return true;
else {
//we didn't find a match, so shift the array by 1 and then
//recursively call this function to compare again.
int[] subset = Arrays.copyOfRange(set1, 1, set1.length);
return contains(subset, set2);
}

}

每次我们找不到匹配序列时,我们都会创建数组的一个子集(不包括第一个元素),并将其传递回 contains 以继续检查。以下是每次迭代的输出:

第一次:set1 =[1, 6, 2, 1, 4, 1, 2, 1, 8] 且 set2 = [1, 2, 1]在数组的开头没有找到匹配项(我们在比较 6 和 2 时中断。下一个递归调用是这样的:

设置1=[6,2,1,4,1,2,1,8],[1,2,1]

下一个递归比较 [2, 1, 4, 1, 2, 1, 8] [1, 2, 1]

依此类推,直到最终递归比较:[1, 2, 1, 8] [1, 2, 1] 并按顺序查找匹配项。

关于java - 如何确定数组是否包含单独数组中的所有整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34188967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com