【发布时间】:2019-02-13 23:16:44
【问题描述】:
我想在 java 中编写一个函数,它将 2 个数组作为输入,如果较小的数组是较大数组的子集,则返回 true
有没有办法让下面的代码更简洁和更节省空间(同时保持 O(n) 时间复杂度?
public boolean isArraySubset(int[] arr1, int arr2[]) {
Set<Integer> set = new HashSet<>();
int largeArr[];
int smallArr[];
if (arr1.length > arr2.length) {
largeArr = arr1;
smallArr = arr2;
} else {
largeArr = arr2;
smallArr = arr1;
}
for (int i : largeArr) {
set.add(i);
}
for (int i : smallArr) {
if (!set.contains(i)) {
return false;
}
}
return true;
}
【问题讨论】:
-
我不是Java开发人员,但只是想一想,您可以将较小数组的项目添加到集合中,然后删除较大数组的每个项目。如果集合最后不为空,则较小的数组不是较大数组的子集。只有当一个数组比另一个数组远小很多时,这才是一个显着的改进。
-
绝对有意义,如果一个数组比另一个小得多。还想知道如何更简洁地编写此代码。谢谢@p.s.w.g
-
一方面,有更多的表达方式来初始化数组中的集合,例如stackoverflow.com/questions/2041778/…。据我所知(我不是 Java 开发人员),您可以使用较新版本的 Java 使其更短。
标签: java arrays time-complexity