Ben*_*DeV 7 java arrays integer contains
我在学校的计算机科学课上,我坚持这个问题.并且甚至不能真正想出如何解决它的想法.
这是一个字一个字:编写一个静态方法contains,它接受两个整数数组a1和a2作为参数,并返回一个布尔值,表示a2的元素序列是否出现在a1中(对于是,为true,对于no为false).a2中的元素序列可以出现在a1中的任何位置,但必须以相同的顺序连续出现.例如,如果名为list1和list2的变量存储以下值:
int[] list1 = {1, 6, 2, 1, 4, 1, 2, 1, 8};
int[] list2 = {1, 2, 1};
Run Code Online (Sandbox Code Playgroud)
然后调用contains(list1, list2)应该返回true,因为list2的值序列{1, 2, 1}包含在list1中的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;
}
Run Code Online (Sandbox Code Playgroud)
从 开始,int first=list2[0];然后在 中找到该数字list1。接下来,循环遍历所有值list2并同时从先前找到的位置开始循环list1,直到list2验证全部值存在list1或发现差异。first如果发现差异,请在先前找到的位置后重新启动。
无耻地复制另一个答案并进行调整:
public static boolean contains(int[] set1, int[] set2) {
for (int i = 0, j = 0; i < set1.length; i++) {
if (set1[i] == set2[j]) {
if (++j >= set2.length)
return true;
}
else {
i -= j;
j = 0;
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这种连续版本机制还可以确保在没有任何额外检查的情况下不会发生溢出。
| 归档时间: |
|
| 查看次数: |
9612 次 |
| 最近记录: |