我想用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;
}
答案 0 :(得分:3)
为什么不使用Set<T>
?只需使用removeAll
方法并检查较小的Set
的大小即可。这种事情已经为您完成。
smallerSet.removeAll(largerSet);
if (smallerSet.isEmpty()) {
// It's a subset
}